SpringBoot的web應用通常都添加了spring-boot-maven-plugin插件.html
打出來的jar包內置了全部的依賴jar, 放在BOOT-INF/lib目錄, 因此體積很大.java
解決步驟:web
1. 修改spring-boot-maven-plugin的參數, 使其將內置的jar包exclude掉, 例如:spring
這樣, 打出來的jar中就不會包含被exclude掉的依賴了.注意layout應設置爲ZIP,否則後面會出現找不到類的錯誤.docker
exclude不止一種寫法, 其餘的exclude方式參見http://docs.spring.io/spring-boot/docs/current/maven-plugin/start-mojo.html.springboot
能夠經過mvn dependency:tree命令查看當前項目的依賴.maven
由於依賴的jar已經被排除掉了, FatJar變瘦, 直接運行就會報ClassNotFoundException. 因此還要進行下一步.spring-boot
能夠在公司的parent pom.xml的pluginManagement部分添加spring-boot-maven-plugin的配置, 這樣每一個web項目就能夠繼承一套全公司統一的配置.post
2. 將上一步exclude掉的jar放到一個外置的目錄中. 如:測試
而後執行以下命令啓動應用:
loader.path指向了外置目錄,告訴springboot容許從外部加載依賴.
loader.path的更多用法參見:http://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-launching.
能夠用mvn dependency:copy-dependencies命令將jar包copy到這個外置目錄.
經測試, 通過上面的兩個步驟, 筆者的應用從70MB縮小爲1.3MB, 極大地縮小了體積.
既縮小了體積, 便於傳輸, 又很容易地控制依賴jar的版本, 作到全公司統一, 共享同一套依賴集合.
特別地, 若是要講應用部署到docker中, 須要修改dockerfile, 將依賴目錄掛載到docker鏡像中, 修改應用的啓動命令(可能會是dockerfile的entrypoint),添加loader.path參數, 指向掛載進來的依賴目錄. 不建議將依賴ADD到docker鏡像, 那樣的話docker鏡像會很大.
http://rickgong.iteye.com/blog/2368985