乐趣区

关于java:SpringBoot24新特性jar自动瘦身

主动剖析瘦身

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 提供的 redisamqp 等大部分 starter 均是此类 jar, 所以在构建后会主动删除。

自定义 jar 实现主动瘦身

  • 创立 MANIFEST.MF jar 包元信息,增加一行 Spring-Boot-Jar-Type: dependencies-starter 即可
resources
     ├── META-INF
         └── MANIFEST.MF


退出移动版