解決SpringBoot jar包太大的問題
阿新 • • 發佈:2019-01-23
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程式碼- 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映象會很大.