SpringBoot框架打包體積簡化過程圖解
Springboot 框架極大的的簡化了程式碼的框架整合開發,想當年還是用ssm框架組合時,那種配置令人頭疼,還有Springboot框架自帶tomcat伺服器,簡化了我們的環境搭建。但是Springboot框架自帶tomcat伺服器也有問題,就是導致一個服務很大,比如一個簡單的業務系統,可能因為匯入的第三方jar包比較多,導致打包出來的jar非常大。假如是內網上傳至伺服器,還好,但是假如是在阿里雲這種雲伺服器,就很考驗頻寬的上行速度了。比如我家50M寬頻,下行很快,但上行才3M,一個jar包100M,我微調一下重新部署,這中間的時間就是10分鐘去了。所以也在琢磨如何簡化jar包。
下圖是spingboot框架打出來的jar目錄情況
在BOOT-INF下面
這個lib下面就是第三方jar包。
下面就來簡化它吧。
我的專案目錄結構如下
course course-common course-pojo course-service course-web
Web中包含springboot框架main啟動入口,打包時,會將 course-common、course-pojo、course-service 這三個服務打成jar包,整合在 course 最終的jar裡lib目錄下。
修改course-web服務的pom檔案
<build> <finalName>mml-course</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <outputDirectory>E:\JARS\pre</outputDirectory> <layout>ZIP</layout> <!—- 必須加這句話 --> <includes> <!—- 表示專案打包時整合哪些jar包--> <include> <groupId>com.mml</groupId> <artifactId>mml-course-service</artifactId> </include> <include> <groupId>com.mml</groupId> <artifactId>mml-course-pojo</artifactId> </include> <include> <groupId>com.mml</groupId> <artifactId>mml-course-common</artifactId> </include> </includes> </configuration> </plugin> </plugins>
重點關注兩處,layout 和 includes 。
layout 是為了 springboot jar簡化後能夠載入第三方jar包目錄,如果沒加入這句話,在待會兒啟動時,會報錯。
includes 是指包含哪些專案的jar包,因為我專案結構的問題,我必須將 service 、pojo、common這三個專案打包進去。假如你的專案中沒有自己專案依賴可以寫成如下格式,表示不包含任何jar包。
<includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes>
修改完pom.xml後,執行 mvn clean package 命令打包出來的springboot專案jar包大小會從100M縮小到100K,此時的jar包並不能直接執行,因為沒有這些第三方依賴。
上傳至伺服器,速度會快很多,原來的jar包執行命令是
nohub java –jar mml-course.jar > ./logs/course.out 2>&1 &
nohub 表示後臺執行這個jar。
現在需要改成如下格式
nohub java –Dloader.path=/path/lib –jar mml-course.jar > ./logs/course.out 2>&1 &
加入了 –Dloader.path=/path/lib , /path/lib 根據實際的第三方jar所在目錄,當然也可以載入多個地址,用,分隔就好了。一定要在pom中加入<layout>ZIP</layout>,否則這步無法載入第三方jar目錄,導致報錯。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。