最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring boot項(xiàng)目fat jar瘦身的實(shí)現(xiàn)

 更新時(shí)間:2018年06月07日 13:54:21   作者:節(jié)奏35  
這篇文章主要介紹了spring boot項(xiàng)目fat jar瘦身的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、項(xiàng)目背景

spring cloud構(gòu)建spring boot項(xiàng)目,精細(xì)化各項(xiàng)目的層次,達(dá)到降低耦合度的目的,項(xiàng)目間基于restful通信。

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

二、fat jar瘦身

經(jīng)過(guò)以上分析,及查閱相關(guān)資料,整理出以下步驟進(jìn)行jar包瘦身:

1.各項(xiàng)目配置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,或其他標(biāo)簽,具體看情況。

2.在項(xiàng)目依賴(lài)jar中抽離出不想存放于fat jar的jar包。

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

      <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屬性值(多個(gè),分隔)-->
              </excludeGroupIds>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>

標(biāo)簽具體含義查看官方文檔。

使用maven對(duì)項(xiàng)目進(jìn)行打包時(shí),使用maven命令:

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

配置插件執(zhí)行此命令后,項(xiàng)目中除excludeGroupIds標(biāo)簽中配置的jar包外,其余都將導(dǎo)入到指定目錄中,至此完成抽離fat jar中多余的jar包。

方法二:項(xiàng)目中不添加maven依賴(lài)插件,直接在對(duì)項(xiàng)目使用mvn復(fù)制依賴(lài)jar包的命令,這種方式需要挨個(gè)對(duì)各個(gè)子項(xiàng)目進(jìn)行依賴(lài)復(fù)制,子項(xiàng)目少可以使用。

mvn dependency:copy-dependencies -DoutputDirectory=E:/lib(若無(wú)動(dòng)態(tài)指定目錄,默認(rèn)在項(xiàng)目的target路徑下生成dependency目錄)

將各項(xiàng)目導(dǎo)出的依賴(lài)jar包,統(tǒng)一放入一個(gè)文件夾中,去除重復(fù),并刪除fat jar中預(yù)留存的依賴(lài)jar包,至此完成抽離fat jar中多余的jar包。

3.將抽離出的jar包,放置服務(wù)器某一路徑下,配置項(xiàng)目啟動(dòng)腳本,進(jìn)行外部加載。

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

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

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

pom的配置可以通用于微服務(wù)體系中,形成統(tǒng)一的配置,各個(gè)項(xiàng)目中的jar包依賴(lài)關(guān)系視具體情況更改。

三、遇到的問(wèn)題及解決辦法

在瘦身過(guò)程中,并不是一帆風(fēng)順的,當(dāng)我認(rèn)為大功告成,啟動(dòng)項(xiàng)目時(shí),發(fā)現(xiàn)啟動(dòng)失敗,jar沖突。

1.解決jar包沖突,通過(guò)mvn命令分析jar包的依賴(lài)關(guān)系,并找到?jīng)_突jar包,并統(tǒng)一版本。

在eclipse中,創(chuàng)建新Maven Build,一開(kāi)始我嘗試了mvn dependency:tree,整體分析一遍jar包依賴(lài),但并沒(méi)有找到問(wèn)題jar包的依賴(lài)關(guān)系,接著我嘗試了mvn dependency:tree -Dverbose,將所有間接的隱性的依賴(lài)也分析了一遍仍未找到問(wèn)題jar包的依賴(lài)關(guān)系。

至此,我懷疑項(xiàng)目中沒(méi)有這個(gè)jar包,反復(fù)打包后,我看到,此問(wèn)題jar包的確在項(xiàng)目依賴(lài)中,只是隱藏的太深。于是,只能針對(duì)單個(gè)jar包進(jìn)行分析:

mvn dependency:tree -Dverbose -Dincludes=xx:xx:xx(xx:xx:xx對(duì)應(yīng)jar包的groupId:artifactId:version)

使用Dincludes后,找到了對(duì)應(yīng)jar包的依賴(lài)關(guān)系,并在項(xiàng)目中排除了該jar包,再次打包后項(xiàng)目啟動(dòng)成功,問(wèn)題解決。

2.打包過(guò)程中,一些細(xì)分的子項(xiàng)目,并未使用spring-boot-maven-plugin插件,而是使用maven-jar-plugin直接打包成一個(gè)可運(yùn)行jar,再結(jié)合了fat jar瘦身配置后發(fā)現(xiàn),原本可以依賴(lài)互通的jar,現(xiàn)在失效了。由于fat jar瘦身后的lib中,僅剩代碼經(jīng)常改動(dòng)的項(xiàng)目的jar,依賴(lài)關(guān)系在可運(yùn)行jar中,并未傳遞,因此需要在本項(xiàng)目中顯性依賴(lài)所需的項(xiàng)目的jar包,才能保證項(xiàng)目的完整。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解

    Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解

    這篇文章主要介紹了Java中的動(dòng)態(tài)和靜態(tài)編譯實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 詳述IntelliJ IDEA提交代碼前的 Code Analysis 機(jī)制(小結(jié))

    詳述IntelliJ IDEA提交代碼前的 Code Analysis 機(jī)制(小結(jié))

    本篇文章主要介紹了詳述IntelliJ IDEA提交代碼前的 Code Analysis 機(jī)制(小結(jié)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-11-11
  • 淺談springmvc的DispatcherServlet分析

    淺談springmvc的DispatcherServlet分析

    本篇文章主要介紹了淺談springmvc的DispatcherServlet分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • spring boot 防止重復(fù)提交實(shí)現(xiàn)方法詳解

    spring boot 防止重復(fù)提交實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了spring boot 防止重復(fù)提交實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了spring boot 防止重復(fù)提交具體配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • 使用Java實(shí)現(xiàn)價(jià)格加密與優(yōu)化功能

    使用Java實(shí)現(xiàn)價(jià)格加密與優(yōu)化功能

    在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)據(jù)加密是一個(gè)非常重要的環(huán)節(jié),尤其是在處理敏感信息(如價(jià)格、用戶(hù)數(shù)據(jù)等)時(shí),本文將詳細(xì)介紹如何使用?Java?實(shí)現(xiàn)價(jià)格加密,并對(duì)代碼進(jìn)行優(yōu)化,需要的朋友可以參考下
    2025-01-01
  • Java使用EasyExcel實(shí)現(xiàn)高效的Excel讀寫(xiě)操作

    Java使用EasyExcel實(shí)現(xiàn)高效的Excel讀寫(xiě)操作

    在日常開(kāi)發(fā)中,Excel 文件的讀寫(xiě)操作是一個(gè)常見(jiàn)的需求,EasyExcel 是阿里巴巴開(kāi)源的一個(gè)高性能、易用的 Excel 讀寫(xiě)庫(kù),可以大幅提高處理 Excel 文件的效率,本篇博客將從 EasyExcel 的基本概念、優(yōu)勢(shì)、安裝、讀寫(xiě)操作以及高級(jí)用法展開(kāi),需要的朋友可以參考下
    2024-12-12
  • Java對(duì)象序列化操作詳解

    Java對(duì)象序列化操作詳解

    這篇文章主要介紹了Java對(duì)象序列化操作,簡(jiǎn)單描述了Java序列化相關(guān)概念、原理并結(jié)合實(shí)例形式總結(jié)分析了常見(jiàn)序列化操作相關(guān)定于與使用技巧,需要的朋友可以參考下
    2018-09-09
  • IDEA項(xiàng)目maven?project沒(méi)有出現(xiàn)plugins和Dependencies問(wèn)題

    IDEA項(xiàng)目maven?project沒(méi)有出現(xiàn)plugins和Dependencies問(wèn)題

    這篇文章主要介紹了IDEA項(xiàng)目maven?project沒(méi)有出現(xiàn)plugins和Dependencies問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring中的BeanFactory與FactoryBean區(qū)別詳解

    Spring中的BeanFactory與FactoryBean區(qū)別詳解

    這篇文章主要介紹了Spring中的BeanFactory與FactoryBean區(qū)別詳解,BeanFactory是一個(gè)接口,它是spring中的一個(gè)工廠(chǎng),FactoryBean也是一個(gè)接口,實(shí)現(xiàn)了3個(gè)方法,通過(guò)重寫(xiě)其中方法自定義生成bean,需要的朋友可以參考下
    2024-01-01
  • JavaWeb.servlet的基本使用方法詳解

    JavaWeb.servlet的基本使用方法詳解

    Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶(hù)的請(qǐng)求和返回給用戶(hù)響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于JavaWeb.servlet基本使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

黄龙县| 鄂州市| 丹巴县| 青铜峡市| 龙门县| 新兴县| 桦甸市| 张家口市| 龙口市| 循化| 平塘县| 寿光市| 博湖县| 夏邑县| 贵州省| 高清| 华安县| 石棉县| 水富县| 和林格尔县| 陇川县| 孟连| 肃南| 蒲城县| 宣汉县| 沙河市| 西和县| 昭觉县| 临海市| 河西区| 兴仁县| 灵山县| 绥棱县| 海淀区| 双辽市| 中方县| 中阳县| 周口市| 清原| 黄石市| 紫阳县|