主动剖析瘦身
Spring Boot 我的项目最终构建解决 JAR 包大小始终是个诟病,须要把所有依赖包内置最终输入可运行的 jar。当然能够应用其余的插件扩大 实现依赖 JAR 和 可运行 jar 拆散能够参考 slot-maven-plugin, 但此种办法治标不治本并不能缩小原有依赖的 JAR 的大小。
Spring Boot 2.4 提供对构建输入 JAR 剖析主动瘦身的性能,主动在构建输入可运行 JAR 时删除 empty starter dependencies
成果展现
先来别离基于 Spring Boot 2.4.0 和 Spring Boot 2.3.6 来构建一个可运行的 jar,再来聊什么是 empty starter
- 应用 start.spring.io 创立一个空的 Spring Boot 我的项目, 留神不须要引入任何依赖
- mvn clean install 构建进去相干可运行 jar
- 别离解压两个 jar 到两个不同的目录
tar -zxvf demo-2.3.6.jar -C demo-2.3.6/
tar -zxvf demo-2.4.0.jar -C demo-2.4.0/
- 统计依赖 jar 个数, 2.3.6 共计 19 个 依赖 jar 而 2.4.0 只有 18 个依赖 jar , 短少了 spring-boot-starter.jar
cd demo-2.3.6/BOOT-INF/lib && ll -h | wc -l
19
cd demo-2.4.0/BOOT-INF/lib && ll -h | wc -l
18
什么是 empty starter
如上文所述,咱们在基于 start.spring.io 创立我的项目的时候 曾经默认引入了, 但在 Spring Boot 2.4 中会主动删除此类 empty starter dependencies
jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
咱们来看一下 spring-boot-stater 有什么特殊性?
- ① 空 jar 不蕴含任何代码
- ② 有援用其余 jar, 只为批量导入其余 jar
所以此类型 jar 在构建成可运行 jar 时并未实际意义,因为批量导入的依赖 jar 都能够被引入。目前 spring boot 提供的 redis
、amqp
等大部分 starter 均是此类 jar, 所以在构建后会主动删除。
自定义 jar 实现主动瘦身
- 创立
MANIFEST.MF
jar 包元信息,增加一行Spring-Boot-Jar-Type: dependencies-starter
即可
resources
├── META-INF
└── MANIFEST.MF