一、前言

在实际项目中,经常会遇到这样的问题。自己的业务代码就十几KB,结果项目打包后,整个jar包却达到了上百MB,受限于网络等限制,导致升级一次功能会非常耗时。这里我们就介绍下如何将自己的代码和三方依赖分开,如果不变动依赖,每次只升级自己的代码部分就可以。

二、实践

2.1 修改pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<plugins>
<!-- 让 JAR 知道主类是哪个 -->
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.wno704.WnoQuartzAdminApplication</mainClass>
</manifest>
</archive>
<outputDirectory>${project.build.directory}/output</outputDirectory>
</configuration>
</plugin>
<!--配置了maven坐标,会把依赖放入project.build.directory的output/lib下-->
<!-- 拷贝依赖到 lib 目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/output/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>

注意:mainClass需要指定项目的主类,springboot项目就是SpringBootApplication所在的类。

2.2 项目启动

由于根据以上的pom文件,打包会将自己的代码成一个干净的 xxx.jar(仅包含 .class、资源等,不含依赖);三方依赖打包输出到 lib/ 子目录中,便于管理、替换、升级。这样我们每次升级只需要替换自己的xxx.jar就可以了。

这个时候,我们的启动脚本要修改如下:

java -cp "wnoQuartzAdmin.jar;lib/*" com.wno704.WnoQuartzAdminApplication

注意:其中wnoQuartzAdmin.jar为自己代码生成的jar包。

最后项目启动如下:

系统访问也正常