亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring boot項目fat jar瘦身的實現

2024-07-14 08:41:11
字體:
來源:轉載
供稿:網友

一、項目背景

spring cloud構建spring boot項目,精細化各項目的層次,達到降低耦合度的目的,項目間基于restful通信。

在對項目打包過程中,使用spring-boot-maven-plugin插件打包,生成的是fat jar,解壓該jar包,會發現項目依賴的jar包存放于BOOT-INF下的lib文件夾中,分析多個子項目后會發現,相同的jar包占絕大多數,然后每次部署于線上環境,各系統的共同jar在服務器上其實是重復擱置的,因此自然會想到是否有方法將共同的jar包,或是不經常改動的jar包,抽離出來,整理出單獨的一份,然后由各子項目啟動時使用外部加載,達到fat jar瘦身的目的。

二、fat jar瘦身

經過以上分析,及查閱相關資料,整理出以下步驟進行jar包瘦身:

1.各項目配置spring-boot-maven-plugin插件(官方文檔),生成fat jar中留存的jar包 

      <plugin>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-maven-plugin</artifactId>        <configuration>          <layout>ZIP</layout>          <!-- <excludeGroupIds>            org.springframework.boot,            org.springframework.cloud,            org.mybatis.spring.boot,            tk.mybatis,            mysql,            com.alibaba,            javax.persistence,            io.springfox,            org.springframework.session          </excludeGroupIds> -->          <includes>            <include>              <groupId>xx</groupId>              <artifactId>xx</artifactId>            </include>            <include>              <groupId>xx</groupId>              <artifactId>xx</artifactId>            </include>          </includes>        </configuration>      </plugin>

如以上代碼,可以使用excludeGroupIds,或者includes,或其他標簽,具體看情況。

2.在項目依賴jar中抽離出不想存放于fat jar的jar包。

方法一(推薦):在項目pom文件中添加maven依賴插件(官方文檔)

      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-dependency-plugin</artifactId>        <version>3.1.1</version>        <executions>          <execution>            <id>copy-dependencies</id>            <phase>package</phase>            <goals>              <goal>copy-dependencies</goal>            </goals>            <configuration>              <!-- <outputDirectory>E:/lib</outputDirectory> -->              <excludeGroupIds>                <!-- 留存于fat jar中的jar包的groupId屬性值(多個,分隔)-->              </excludeGroupIds>              <overWriteSnapshots>true</overWriteSnapshots>            </configuration>          </execution>        </executions>      </plugin>

標簽具體含義查看官方文檔。

使用maven對項目進行打包時,使用maven命令:

mvn clean install -Dmaven.test.skip=true -DoutputDirectory=E:/lib(-DoutputDirectory=E:/lib是命令動態指定項目依賴的jar包導出的路徑,若在項目中指定了outputDirectory的標簽值,則將覆蓋此動態路徑)

配置插件執行此命令后,項目中除excludeGroupIds標簽中配置的jar包外,其余都將導入到指定目錄中,至此完成抽離fat jar中多余的jar包。

方法二:項目中不添加maven依賴插件,直接在對項目使用mvn復制依賴jar包的命令,這種方式需要挨個對各個子項目進行依賴復制,子項目少可以使用。

mvn dependency:copy-dependencies -DoutputDirectory=E:/lib(若無動態指定目錄,默認在項目的target路徑下生成dependency目錄)

將各項目導出的依賴jar包,統一放入一個文件夾中,去除重復,并刪除fat jar中預留存的依賴jar包,至此完成抽離fat jar中多余的jar包。

3.將抽離出的jar包,放置服務器某一路徑下,配置項目啟動腳本,進行外部加載。

nohup java -Dloader.path="xx/lib" -jar xx.jar

-Dloader.path即外部加載地址。

至此瘦身完畢,可以在項目打包后的jar包看到,BOOT-INF下的lib中,僅有所需的jar包,大大減少了fat jar的大小。

pom的配置可以通用于微服務體系中,形成統一的配置,各個項目中的jar包依賴關系視具體情況更改。

三、遇到的問題及解決辦法

在瘦身過程中,并不是一帆風順的,當我認為大功告成,啟動項目時,發現啟動失敗,jar沖突。

1.解決jar包沖突,通過mvn命令分析jar包的依賴關系,并找到沖突jar包,并統一版本。

在eclipse中,創建新Maven Build,一開始我嘗試了mvn dependency:tree,整體分析一遍jar包依賴,但并沒有找到問題jar包的依賴關系,接著我嘗試了mvn dependency:tree -Dverbose,將所有間接的隱性的依賴也分析了一遍仍未找到問題jar包的依賴關系。

至此,我懷疑項目中沒有這個jar包,反復打包后,我看到,此問題jar包的確在項目依賴中,只是隱藏的太深。于是,只能針對單個jar包進行分析:

mvn dependency:tree -Dverbose -Dincludes=xx:xx:xx(xx:xx:xx對應jar包的groupId:artifactId:version)

使用Dincludes后,找到了對應jar包的依賴關系,并在項目中排除了該jar包,再次打包后項目啟動成功,問題解決。

2.打包過程中,一些細分的子項目,并未使用spring-boot-maven-plugin插件,而是使用maven-jar-plugin直接打包成一個可運行jar,再結合了fat jar瘦身配置后發現,原本可以依賴互通的jar,現在失效了。由于fat jar瘦身后的lib中,僅剩代碼經常改動的項目的jar,依賴關系在可運行jar中,并未傳遞,因此需要在本項目中顯性依賴所需的項目的jar包,才能保證項目的完整。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人a**站| 欧美高清自拍一区| 国产日韩精品入口| 日韩电影免费在线观看| 欧美大成色www永久网站婷| 欧美日韩电影在线观看| 中文字幕亚洲欧美日韩高清| 亚洲2020天天堂在线观看| 国语自产偷拍精品视频偷| 久久久久久久久久久av| 丁香五六月婷婷久久激情| 国产黑人绿帽在线第一区| 亚洲aⅴ日韩av电影在线观看| 日韩av在线天堂网| 蜜月aⅴ免费一区二区三区| 最近2019中文字幕在线高清| 少妇高潮久久久久久潘金莲| zzijzzij亚洲日本成熟少妇| 国产精品欧美激情| 久久香蕉精品香蕉| 高清视频欧美一级| 欧美亚洲国产成人精品| 日韩电影免费在线观看| 免费av一区二区| 91精品久久久久久久久青青| 成人免费观看网址| 国产精品久久一区| 欧美性猛xxx| 亚洲天堂免费视频| 日韩精品日韩在线观看| 日韩在线高清视频| 俺去啦;欧美日韩| 日本一区二区在线播放| 性夜试看影院91社区| 伊人伊成久久人综合网站| 国产精品精品久久久| 久久久久久久久久久久av| 国产精品永久免费观看| 欧美亚洲国产视频| 欧美日韩精品在线| 欧美国产日韩二区| 久久久久久久一区二区| 亚洲国产成人精品女人久久久| 久久九九有精品国产23| 久久久最新网址| 欧美激情在线有限公司| 一本一道久久a久久精品逆3p| 中文字幕日韩高清| 欧美高跟鞋交xxxxxhd| 精品亚洲夜色av98在线观看| 国模精品视频一区二区三区| 国产精品高清在线观看| 欧美激情小视频| 韩日欧美一区二区| 在线一区二区日韩| 色阁综合伊人av| 日韩电视剧免费观看网站| 亚洲成人久久一区| 中文字幕日本精品| 久久久极品av| 成人亚洲欧美一区二区三区| 国产日韩在线亚洲字幕中文| 日韩av网站电影| 亚洲欧美制服另类日韩| 欧美在线激情网| 亚洲一区二区三区四区在线播放| 黑人巨大精品欧美一区二区一视频| 国产成人欧美在线观看| 欧美激情精品久久久久久蜜臀| 亚洲国产日韩精品在线| 日韩av中文字幕在线| 亚洲天堂第一页| 成人国产精品av| 大荫蒂欧美视频另类xxxx| 不卡av电影院| 日韩av电影在线免费播放| 中文字幕不卡在线视频极品| 国产欧美在线播放| 中文字幕日韩av综合精品| 日韩亚洲综合在线| 欧美国产日韩xxxxx| 亚洲精品国产suv| 国产精品一区二区三区免费视频| www.日韩av.com| 欧美激情一区二区三区高清视频| 亚洲精品电影网在线观看| 91超碰caoporn97人人| 欧美在线视频观看| 国产精品亚洲综合天堂夜夜| 日韩av高清不卡| 亚洲第一网站男人都懂| 欧美激情国产日韩精品一区18| 精品日韩视频在线观看| 欧洲美女7788成人免费视频| 日韩美女免费线视频| 亚洲人成网站999久久久综合| 成人网在线视频| 大胆人体色综合| 国产精品视频1区| 日本视频久久久| 国产在线播放91| 国外成人在线播放| 亚洲tv在线观看| 日韩av三级在线观看| 91干在线观看| 国产精品视频久| 亚洲第一福利在线观看| 精品久久久久久久久久久| 少妇久久久久久| 中文字幕欧美日韩精品| 欧美激情小视频| 亚洲最大福利视频网站| 国产精品久久久久7777婷婷| 久久久久北条麻妃免费看| 国产精品99导航| 国产精品美女久久久久久免费| 欧美激情中文字幕在线| 亚洲色图17p| 日韩中文字幕免费| 亚洲男人的天堂在线| 国产成人精品久久| 亚洲mm色国产网站| 日韩成人av在线播放| 97福利一区二区| 在线精品视频视频中文字幕| 国产成人亚洲综合| www国产精品视频| 成人黄色免费片| 欧美性生交大片免费| 国产精品r级在线| 国产日韩综合一区二区性色av| 91精品国产色综合久久不卡98| 国产成人一区二区三区小说| 亚洲国产一区二区三区四区| 日韩成人在线观看| 欧美激情欧美激情| 亚洲第一综合天堂另类专| 91精品免费久久久久久久久| 国产伦精品一区二区三区精品视频| 2018中文字幕一区二区三区| 欧美一级成年大片在线观看| 黄色成人av网| 国产一区二区三区在线看| 91在线国产电影| 欧美激情一区二区三区成人| 国产啪精品视频网站| 国产精品久久久久久中文字| 欧美wwwwww| 久久精品成人一区二区三区| 日韩在线中文字幕| 亚洲护士老师的毛茸茸最新章节| 欧美黑人性生活视频| 国产精品老女人精品视频| 在线观看精品自拍私拍| 久久综合国产精品台湾中文娱乐网| 国产不卡在线观看| 久久亚洲私人国产精品va| 91情侣偷在线精品国产| 美女少妇精品视频| 69av在线视频| 色妞色视频一区二区三区四区| 国产精品视频免费在线| 中文字幕av一区中文字幕天堂| 亚洲自拍偷拍色片视频|