情况概述
在SpringBoot项目中使用“mvn package”进行打包操作时,打包生成的jar文件一般只有几十K左右,因为缺少依赖的jar包,所以无法直接运行。
为了能让SpringBoot运行,需要其生成的jar包和项目依赖的jar包等统一再次打包,然后才可以通过“java -jar"的方式运行。
将SpringBoot项目打包成一个可运行的jar文件,通常有两种方式:
- 在中使用spring-boot-maven-plugin插件
- 在中给properties节点添加新的配置
方式一:使用spring-boot-maven-plugin插件
在项目的中配置spring-boot-maven-plugin插件,其中的关键goal是repackage。
......
<build>
<plugins>
...
<plugin>
<groupId></groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--项目的启动类-->
<mainClass></mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
....
这种方式看着添加配置较多,但是在配置完成后,只需要重新执行“mvn package”即可。
执行之后,在项目的target目录看到两个文件。分别是:
- my-springboot-demo-0.0.
- my-springboot-demo-0.0.
可以看到,以original结尾的文件,还是只有几十K,这是没有安装springboot打包插件时,"mvn package"生成的jar文件。
而另一个jar文件通常有几十M,这是采用springboot插件后,再次打包生成的文件。这个文件包括了项目的代码和允许所依赖的各种jar文件。
方式二:在的properties节点添加新的配置
如果项目的文件以是spring-boot-starter-parent做为父类,类似有如下配置
<parent>
<groupId></groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.</version>
<relativePath/>
</parent>
则可以不使用spring-boot-maven-plugin插件,只需要的properties节点中添加一个子节点。
<properties>
......
<!--项目启动类-->
<start-class></start-class>
......
</properties>
但是这时,再次执行“mvn package”的话,生成的jar文件仍然只有几十K,跟原来没啥区别。
这时需要在项目的目录下,执行如下命令:
mvn package spring-boot:repackage
# 或者顺便跳过测试代码的编译和运行
mvn -=true package spring-boot:repackage
-=true:跳过测试代码的编译和运行
-DskipTests:跳过测试代码的运行
执行后,就会在项目的target目录下看到熟悉的两个文件了。
两种方式的比较
个人相对喜欢第一种方式,因为配置更灵活一些,可以设置要将哪些依赖jar进行打包。例如在配置插件时:
<plugin>
......
<configuration>
<mainClass></mainClass>
<layout>ZIP</layout>
<!-- 指定依赖jar,一般是项目下的其它变动频繁的子项目 -->
<includes>
<include>
<groupId></groupId>
<artifactId>common-utils</artifactId>
</include>
<include>
<groupId></groupId>
<artifactId>service-edu</artifactId>
</include>
</includes>
</configuration>
......
</plugin>
这样的话,打包后的jar文件,就只包括项目文件和指定的依赖文件,会比将全部依赖文件都打包要小很多,通常不超过5M。上传到服务器很有优势:)
操作流程
- 先将全部依赖打包生成一个大的jar文件,再将此jar文件解压,将相关依赖复制到一个文件夹(commonlib)中。这里需要注意的是要剔除子项目生成的jar文件。
- 指定项目依赖的子项目,重新打包,生成小的jar文件。
- 执行“java -jar”时,指定commlib即可
java -server -Xms128m -Xmx512m --=./commonlib -jar ./my-springboot-demo-0.0.