激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - spring boot項目fat jar瘦身的實現

spring boot項目fat jar瘦身的實現

2021-05-08 10:24節奏35 Java教程

這篇文章主要介紹了spring boot項目fat jar瘦身的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、項目背景

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包 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<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依賴插件(官方文檔

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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包,才能保證項目的完整。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/tec-dream/p/9149189.html

延伸 · 閱讀

精彩推薦
  • Java教程Spring Boot集成spring-boot-devtools開發時實現熱部署的方式

    Spring Boot集成spring-boot-devtools開發時實現熱部署的方式

    這篇文章主要介紹了Spring Boot集成spring-boot-devtools開發時實現熱部署的方式,文中還給大家提到了spring boot 實現熱部署的方式及集成注意事項,感興趣的朋友...

    Sam的個人主頁11692021-04-28
  • Java教程JavaWeb工程中集成YMP框架快速上手(二)

    JavaWeb工程中集成YMP框架快速上手(二)

    YMP是一個非常簡單、易用的一套輕量級JAVA應用開發框架,設計原則主要側重于簡化工作任務、規范開發流程、提高開發效率。對YMP框架感興趣的小伙伴們可...

    有理想的魚1952020-04-02
  • Java教程理解Java中的靜態綁定和動態綁定

    理解Java中的靜態綁定和動態綁定

    這篇文章主要幫助大家理解Java中的靜態綁定和動態綁定,在Java中存在兩種綁定方式,一種為靜態綁定,另一種就是動態綁定,亦稱為后期綁定,感興趣的小伙伴...

    公眾號—程序員之路5242020-04-03
  • Java教程spring boot利用docker構建gradle項目的實現步驟

    spring boot利用docker構建gradle項目的實現步驟

    這篇文章主要給大家介紹了關于spring boot利用docker構建gradle項目的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參...

    張占嶺11292021-04-27
  • Java教程詳解Spring學習之編程式事務管理

    詳解Spring學習之編程式事務管理

    本篇文章主要介紹了詳解Spring學習之編程式事務管理,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    顏洛濱3592020-12-03
  • Java教程java實現畫圖板功能

    java實現畫圖板功能

    這篇文章主要為大家詳細介紹了java實現畫圖板功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    翱翔道浮1762020-09-29
  • Java教程java模擬http請求的錯誤問題整理

    java模擬http請求的錯誤問題整理

    本文是小編給大家整理的在用java模擬http請求的時候遇到的錯誤問題整理,以及相關分析,有興趣的朋友參考下。...

    總有叼民想害朕9532021-05-06
  • Java教程Java中的鎖分類的詳細介紹

    Java中的鎖分類的詳細介紹

    這篇文章主要介紹了Java中的鎖分類的詳細介紹,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    byhieg7502020-12-28
主站蜘蛛池模板: 女人a级毛片| 欧美一级特黄aaaaaaa什 | 色99久久 | tube7xxx| 夜夜b | 99爱视频 | 欧美伦交 | 欧美一二区视频 | 久久精品视频1 | 亚欧在线免费观看 | 日韩在线视频免费 | 欧美a级在线免费观看 | 九九热在线观看视频 | 色屁屁xxxxⅹ在线视频 | 91在线精品亚洲一区二区 | 精品成人免费视频 | 羞羞网站| 91欧美视频 | 久久国产精品电影 | 欧美激情精品久久久久 | 久久免费看毛片 | 色综合网在线观看 | 精品一区二区久久久久久按摩 | 精品一区二区在线观看视频 | 91懂色 | 狠狠久久 | 毛片天天看 | 九一免费国产 | 久久精品网址 | 性欧美在线视频 | 国产一区视频在线免费观看 | 精品亚洲在线 | 日本网站在线看 | 91黄瓜视频 | 黄色1级视频 | 欧美一级毛片大片免费播放 | 色七七网站 | 青青草好吊色 | 羞羞电影在线观看 | 日韩视频一二三 | 久久99精品国产自在现线 |