SpringBoot瘦身打包部署的實現(xiàn)
一、前言
最近做的項目由于引入第三方庫導致在運行mvn clean package 打jar時,編譯出來的 Jar 包很大(服務器多達500MB)。
二、瘦身前的Jar包
SpringBoot編譯出來的Jar包中,磁盤占用大的,是一些外部依賴庫(jar包),例如:
進入項目工程根目錄,執(zhí)行 mvn clean package命令,得到的Jar包目錄結構如下:
整個Jar包 524 MB(可以通過解壓軟件查看,會發(fā)現(xiàn)基本都是lib下的依賴包占用)
三、解決方法
步驟1: 正常編譯JAR包,解壓出lib文件夾
POM文件如下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
進入項目根目錄,執(zhí)行命令: mvn clean package
將編譯后的Jar包解壓,拷貝 BOOT-INF 目錄下的lib文件夾 到目標路徑;
步驟2: 修改pom.xml配置,編譯出不帶 lib 文件夾的Jar包
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
配置完成后,再次執(zhí)行編譯:mvn clean package
生成的 Jar 包體積明顯變小(還有175KB),如下所示, 外部的 jar 包已經(jīng)不會被引入了:
步驟3: 運行編譯后的Jar包
將 步驟1 解壓出來的lib文件夾、步驟2編譯的jar包放在同一個目錄, 運行下面命令:
java -Dloader.path=/path/to/lib -jar /path/to/springboot-jsp-0.0.1-SNAPSHOT.jar
備注:
- 將/path/to/改成實際的路徑。
- -Dloader.path=lib文件夾路徑
最終目錄文件結構是:
├── lib #lib文件夾 └── springboot-jsp-0.0.1-SNAPSHOT.jar
說明
1、通常,一個工程項目架構確定后,引入的jar包基本上不會變,改變的大部分是業(yè)務邏輯;
2、后面如果需要變更業(yè)務邏輯,只需要輕量地編譯工程,大大提高項目部署的效率。
四、特殊處理
1、以上步驟打包去除所有依賴包,如果想引入內(nèi)部編譯的依賴包可以通過includes屬性進行添加,利用引用了內(nèi)部的dubbo可以通過如下配置
配置完成后,再次執(zhí)行編譯:mvn clean package
結構如下:
2、如果引入內(nèi)部包過多,也可以通過excludeGroupIds屬性去掉不變的依賴包。
到此這篇關于SpringBoot瘦身打包部署的實現(xiàn)的文章就介紹到這了,更多相關SpringBoot瘦身打包部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Security如何在Servlet中執(zhí)行
這篇文章主要介紹了Spring Security如何在Servlet中執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04Spring Boot使用過濾器和攔截器分別實現(xiàn)REST接口簡易安全認證示例代碼詳解
這篇文章主要介紹了Spring Boot使用過濾器和攔截器分別實現(xiàn)REST接口簡易安全認證示例代碼,通過開發(fā)實踐,理解過濾器和攔截器的工作原理,需要的朋友可以參考下2018-06-06Java EasyExcel讀寫excel如何解決poi讀取大文件內(nèi)存溢出問題
這篇文章主要介紹了Java EasyExcel讀寫excel如何解決poi讀取大文件內(nèi)存溢出問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06java中@JSONField和@JsonProperty注解的使用說明及對比
@JSONField與@JsonProperty隸屬兩個不同的包,前者是阿里系的fastjson包,后者是spring?boot官方使用的jackson包,本文主要介紹了java中@JSONField和@JsonProperty注解的使用說明及對比,感興趣的可以了解一下2023-11-11