如何减小Spring Boot项目jar包体积
相信大部分Java开发者在使用SpringBoot开发项目时,经常会遇到代码频繁改动,每次打包部署到开发/测试环境时,由于jar包体积过大,上传jar包消耗了大量的时间,下面介绍如何给SpringBoot项目jar包减肥(使用maven作为打包工具)
注:Spring Boot版本:2.5.7、JDK版本:jdk8
jar包体积
可以看到,一个普通的Spring Boot项目,其生成的jar包体积就高达几十近百兆
jar包结构
解压生成的jar包,查看其目录结构
BOOT-INF
- classes 业务代码
- lib 项目依赖
META-INF
- maven maven配置信息
- MANIFEST.MF jar包的描述信息和属性
- spring-configuration-metadata.json 配置提示信息,使用IDE编写配置文件会有提示
org
- springframework 启动jar包需要的class
修改maven打包配置
修改项目pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>使用maven重新打包,可以发现现在的jar包体积比原来要小很多
准备jar包运行需要的依赖
不修改maven打包配置,生成带有
lib
目录的jar包,然后解压将lib
目录单独提取出来修改maven打包配置,将依赖copy到指定目录
在plugins标签中添加下面内容,如果
maven-dependency-plugin
找不到,可以先引入该依赖,然后删除该依赖配置,以后每次打包后在target目录下会生成一个lib
依赖目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
运行瘦身后的jar包(仅限JDK8版本)
通过指定
loader.path
参数指定依赖目录1
java -Dloader.path=./lib -jar user-0.0.1-SNAPSHOT.jar
通过指定
java.ext.dirs
参数,注意不能覆盖原有的依赖($JAVA_HOME/jre/lib/ext)
,可以通过:
添加多个依赖1
java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:./lib -jar user-0.0.1-SNAPSHOT.jar
==注意:==
java.ext.dirs
参数在JDK8以上版本好像不支持