自動分析瘦身
Spring Boot 項目最終構(gòu)建處理 JAR 包大小一直是個詬病摇邦,需要把所有依賴包內(nèi)置最終輸出可運行的 jar奉瘤。 當(dāng)然可以使用其他的插件擴(kuò)展 實現(xiàn)依賴 JAR 和 可運行 jar 分離可以參考 slot-maven-plugin, 但此種方法治標(biāo)不治本并不能減少原有依賴的 JAR 的大小。
Spring Boot 2.4 提供對構(gòu)建輸出 JAR 分析自動瘦身的功能句旱,自動在構(gòu)建輸出可運行 JAR 時刪除 empty starter dependencies
效果展示
先來分別基于 Spring Boot 2.4.0 和 Spring Boot 2.3.6 來構(gòu)建一個可運行的 jar 幸撕,再來聊什么是 empty starter
- 使用 start.spring.io 創(chuàng)建一個空的 Spring Boot 項目打月,注意不需要引入任何依賴
- mvn clean install 構(gòu)建出來相關(guān)可運行 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/
- 統(tǒng)計依賴 jar 個數(shù), 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 創(chuàng)建項目的時候 已經(jīng)默認(rèn)引入了, 但在 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,只為批量導(dǎo)入其他 jar
所以此類型 jar 在構(gòu)建成可運行 jar 時并未實際意義闰蛔,因為批量導(dǎo)入的依賴 jar 都可以被引入。目前 spring boot 提供的 redis
图柏、amqp
等大部分 starter 均是此類 jar,所以在構(gòu)建后會自動刪除序六。
自定義 jar 實現(xiàn)自動瘦身
- 創(chuàng)建
MANIFEST.MF
jar 包元信息,添加一行Spring-Boot-Jar-Type: dependencies-starter
即可
resources
├── META-INF
└── MANIFEST.MF