1. 程式人生 > >解決SpringBoot jar包太大的問題

解決SpringBoot jar包太大的問題

Xml程式碼  
<plugin>  
 <groupId>org.springframework.boot</groupId>  
   <artifactId>spring-boot-maven-plugin</artifactId>  
   <version>1.5.1.RELEASE</version>  
   <configuration>  
      <layout>ZIP</layout>  
       <excludes>  
           <exclude>  
               <groupId>ch.qos.logback</groupId>  
               <artifactId>logback-classic</artifactId>  
           </exclude>  
           <exclude>               <groupId>com.google.guava</groupId>  
               <artifactId>guava</artifactId>  
           </exclude>  
       </excludes>  
   </configuration>  
</plugin>  
可以通過mvn dependency:tree命令檢視當前專案的依賴.因為依賴的jar已經被排除掉了, FatJar變瘦, 直接執行就會報ClassNotFoundException. 所以還要進行下一步.
可以在公司的parent pom.xml的pluginManagement部分新增spring-boot-maven-plugin的配置, 這樣每個web專案就可以繼承一套全公司統一的配置.

2. 將上一步exclude掉的jar放到一個外接的目錄中. 如:

然後執行如下命令啟動應用:

Cmd程式碼  收藏程式碼
  1. java -Dloader.path="lib/" -jar common-service.jar  

loader.path指向了外接目錄,告訴springboot允許從外部載入依賴. 

可以用mvn dependency:copy-dependencies命令將jar包copy到這個外接目錄.

經測試, 經過上面的兩個步驟, 筆者的應用從70MB縮小為1.3MB, 極大地縮小了體積.

既縮小了體積, 便於傳輸, 又很容易地控制依賴jar的版本, 做到全公司統一, 共享同一套依賴集合.

特別地, 如果要講應用部署到docker中, 需要修改dockerfile, 將依賴目錄掛載到docker映象中, 修改應用的啟動命令(可能會是dockerfile的entrypoint),新增loader.path引數, 指向掛載進來的依賴目錄. 不建議將依賴ADD到docker映象, 那樣的話docker映象會很大.