SpringBoot服务采用jar瘦身的方式进行部署:
背景
SpringBoot 为我们快速开发提供了很好的架子,使得我们只需要少量配置就能开始我们的开发工作,
但是当我们需要打包上传部署时,却是很神伤的一个问题,因为打出来的 Jar 包少则十几兆,多则一百来兆,
如果服务器部署在公司内网,速度还行,我们需要上传至公网服务器时,是非常慢的,编译出来的 Jar 包很大,
如果工程引入了许多开源组件(Spring Cloud等),那就更大了。这个时候如果想要对线上运行工程有一些微调,则非常痛苦。
这就引出了SpringBoot项目Jar包如何瘦身部署。
一、jar包瘦身
1、回顾以往的常用打包方式
首先,我们项目的 pom.xml 文件中的打包方式如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
说明:这是 SpringBoot 中默认的打包方式,也是我们平时常用的打包方式。
2、JAR包瘦身的打包方式:
我们对 SpringBoot 中默认的打包方式做一些配置:
<build>
<!--使用JAR包瘦身的方式-->
<plugins>
<!--1、插件maven-dependency-plugin负责创建lib目录,同时把需要依赖的jar包全部复制进去。-->
<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>
<!--将lib中的所有jar包输出的位置-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- 间接依赖也拷贝 -->
<excludeTransitive>false</excludeTransitive>
<!-- 带上版本号 -->
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<!--2、插件spring-boot-maven-plugin,打项目jar(即剔除lib文件下的所有依赖jar包)-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--项目的启动类-->
<mainClass>com.lucky.TestServiceApplication</mainClass>
<!--指定了打包方式为 ZIP,注意:一定是大写的-->
<layout>ZIP</layout>
<includes>
<!--有自己的依赖 jar,可以在此导入-->
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<!--repackage:剔除其它的依赖,只需要保留最简单的结构-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--3、编译插件,通过 JDK 1.8 进行编译(根据实际情况配置)-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
参数说明:
mainClass,我们指定了项目的启动类
layout,我们指定了打包方式为 ZIP,注意:一定是大写的
includes,有自己的依赖 jar,可以在此导入
repackage,剔除其它的依赖,只需要保留最简单的结构
3、拷贝target下的lib及打包好的项目**.jar
通过 maven clean package打包完成后,我们在target文件下,拷贝lib文件及项目jar包,可以看到此时的项目jar 包只有几十KB或者几兆了。
二、项目部署及启动
我们将 lib 目录以及最后打包的瘦身项目 jar 包,上传至服务器,
然后使用命令启动服务:
nohup java -Dloader.path=./lib -jar ./test-service-0.0.1-SNAPSHOT.jar &
参数说明:
-Dloader.path,告诉它所依赖的 maven jar 包位置
test-service-0.0.1-SNAPSHOT.jar,项目 jar 包的名字
nohup、&,使得 jar 包在服务后台运行
三、总结
1、通常情况下,一个工程项目架构确定后,引入的jar包基本上不会变,改变的大部分是业务逻辑;
2、后续如果需要变更业务逻辑,只需要轻量地编译工程,大大提高项目部署的效率;
3、简单来讲,jar瘦身就是将jar包和classes文件分离出来,使用瘦身部署,方便每次的迭代更新,不用每次都上传一个很大的 jar 包,从而节省部署时间。
注意:
需要注意的一点,如果后续有发生jar包的变动,需要重新打包更新lib。
maven引入本地jar包时,不能打入jar部署包的问题解决方案:
第一步:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 添加以下配置会将本地jar引入最终打的jar包中 -->
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
第二步:将nothing改为本地包对应的groupId和artifactId,默认是nothing(没有什么)
<include>
<groupId>***</groupId>
<artifactId>***</artifactId>
</include>

21万+

被折叠的 条评论
为什么被折叠?



