1. 程式人生 > 實用技巧 >「SpringBoot2.4新特性」jar自動瘦身

「SpringBoot2.4新特性」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

專案推薦: Spring Cloud 、Spring Security OAuth2的RBAC許可權管理系統 歡迎關注