1. 为什么会导致jar变大

SpringBoot 部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud 等),那就更大了。

这个时候如果想要对线上运行工程有一些微调,则会非常的痛苦。

我们先来看看一般情况下打包出来的jar包

Tomcat 在部署 Web 工程的时候,可以进行增量更新,SpringBoot 也是可以的~

SpringBoot 编译出来的 Jar 包中,磁盘占用大的,是一些外部依赖库(jar 包),这些依赖包在lib下面.

进入项目工程根目录,执行 mvn clean install 命令,得到的 Jar 包,用压缩软件打开,目录结构如下:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.App</mainClass><layout>ZIP</layout></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugins>
<build>

2.将lib抽离出来 

2.1打无依赖jar包

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><layout>ZIP</layout><includes><include><!-- 排除所有Jar --><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration></plugin></plugins>
</build>

输出依赖包到指定位置,后期可以配置在maven插件中

mvn dependency:copy-dependencies -DoutputDirectory=D:\javatest\lib  -DincludeScope=runtime

指定lib位置,启动jar

java -Dloader.path=lib/ -jar activiti-0.0.1-SNAPSHOT.jar

3,父工程,保留核心代码

只包含模块核心代码,第三方的依赖包全部打入到lib中

<build><finalName>${artifactId}</finalName><plugins><!--java -Dloader.path=lib/ -jar jheng-system.jar--><plugin><!--打包时去除第三方依赖--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.jheng.system.SystemApplication</mainClass><executable>true</executable><layout>ZIP</layout><!--将下面三个模块的jar包,打包到核心包中--><includes><include><artifactId>jheng-common-core</artifactId><groupId>jheng</groupId></include><include><artifactId>jheng-api</artifactId><groupId>jheng</groupId></include><include><artifactId>jheng-common-security</artifactId><groupId>jheng</groupId></include><include><artifactId>jheng-common-redis</artifactId><groupId>jheng</groupId></include></includes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!--拷贝第三方依赖文件到指定目录,只有在引入第三方依赖包时,才需要重新打--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!--依赖jar包的输出目录,根据自己喜好配置--><outputDirectory>${project.build.directory}/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><!--排除以下artifactId的jar包--><excludeArtifactIds>jheng-common-core,jheng-api,jheng-common-security,jheng-common-redis</excludeArtifactIds></configuration></execution></executions><version>3.2.0</version></plugin></plugins>
</build>

项目组成:

4,docker启动

需要将lib拷贝到镜像中.

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY *.jar /myapp.jar
COPY lib /lib
ENTRYPOINT ["java","-Dloader.path=/lib/","-jar","/myapp.jar"]

Spring boot项目打的jar包太大,如何让他瘦下来相关推荐

  1. jar注册成服务器,Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动(示例代码)...

    背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...

  2. Spring boot 项目 执行 jar 包时 显示 没有主清单属性

    1.springboot 项目模块 打包问题 **问题描述**: 直接执行jar包时,控制台显示"没有主清单属性". **问题原因**:这个问题一般是你的项目不是继承 spring ...

  3. 使用Spring Boot Thin Launcher 打包Spring Boot项目,jar包瘦身

    原文地址:https://www.jianshu.com/p/3fa4039d90d7 -------------------------------------------------------- ...

  4. spring boot 项目打成jar包后读取文件问题

    java.io.FileNotFoundException: class path resource [xxx.xls] cannot be resolved to absolute file pat ...

  5. Spring Boot项目打war包(idea:多种方式)

    Spring Boot项目打war包(idea:多种方式) 前言:在idea中,经常会对web项目进行打jar包或者war包.jar包在Java环境中运行,war包在Tomcat服务器中跑.对于打wa ...

  6. spring boot所打的jar在服务器启动时,日志打印时间、jar所使用时间和系统当前时间不一致

    1.spring boot所打的jar在服务器启动时,日志打印时间.jar所使用时间和系统当前时间不一致 1)系统时间 2)日志打印时间 2.解决方法 在启动的时间添加-Duser.timezone= ...

  7. spring boot 项目打成war包部署到服务器

    这是spring boot学习的第二篇了,在上一篇已经整合了spring boot项目了,如果还有小伙伴没有看得可以先去看第一篇 基础整合spring boot项目 到这里的小伙伴应该都是会整合基本的 ...

  8. 公司内网搭建spring boot maven下载jar包失败的处理方法

    前段时间,部门决定重新搭建新框架,转为现在火热的spring boot.由于之前没有接触过,因此自己在网上找资料学习,学习初期,搭建工程项目时遇到了一个问题:按照教程步骤,在家里成功创建工程,在公司却 ...

  9. 解决SpringBoot jar包太大的问题

    转载 2017年09月18日 09:21:53 577 SpringBoot的web应用一般都添加了spring-boot-maven-plugin插件. Maven xml代码   <buil ...

最新文章

  1. 惰性求值 php,详细介绍C#函数式编程的示例代码
  2. jenkins安装插件一直不动
  3. 【SQL编程】Greenplum 与 MySQL 数据库获取周几函数及函数结果保持一致的方法
  4. 编码的奥秘txt_各学科最佳入门丛书推荐
  5. NYNU_省赛选拔题(10)
  6. HDU2044 一只小蜜蜂...【递推】
  7. android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  8. 网易互娱基于 Flink 的支付环境全关联分析实践
  9. 艾宾浩斯曲线在线 PDF 文件生成 在线背单词 背单词计划表 高考-四级-六级-SAT-托福-雅思-GRE-17 天搞定 GRE 单词, 背单词神器-动态生成时间表! 利用艾宾浩斯记忆曲线自动生成背单
  10. css表格一行删除线,EXCEL电子表格一行中间画一条删除线怎么画/excel表格如何划掉数据...
  11. 物质模拟器3.0版,变得彩色
  12. C++之struct构造函数
  13. ACL/NAACL‘22 推荐系统论文梳理
  14. 车轮轨迹原理_在简单地形上小车运动轨迹的数学表达(一)
  15. 干货 I 用数据分析进行“无死角”的复盘?
  16. 【智能无线小车系列十】智能小车一体化测试
  17. 求阶乘问题c语言编程,求阶乘问题
  18. 1014 福尔摩斯的约会(python)
  19. is are am 三者的区别
  20. solidworks装配体改为柔性_SolidWorks|链条、皮带的绘制及其动画演示

热门文章

  1. 几种简单的网络攻击介绍
  2. 记录i春秋的writeup
  3. 基于无埋点技术的用户行为分析
  4. Sqlserver的convert函数
  5. ElasticSearch学习_陶文2_时间序列数据库的秘密(2)——索引
  6. 客户价值分析。[技术]
  7. 如何使用蓝牙模块与电脑通信,实现自主开发
  8. cdn服务器,CDN加速服务器优势
  9. 综合案例:使用Configmap-reload动态热加载Configmap中的配置文件(三十七)
  10. 侠诺QVM-108高清视频、图片无线切换系统功能介绍