内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

怎么在springboot項(xiàng)目中使用fatjar實(shí)現(xiàn)瘦身-創(chuàng)新互聯(lián)

怎么在spring boot項(xiàng)目中使用fat jar實(shí)現(xiàn)瘦身?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、巴東網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一、項(xiàng)目背景

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

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

二、fat jar瘦身

經(jīng)過以上分析,及查閱相關(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)目依賴jar中抽離出不想存放于fat jar的jar包。

方法一(推薦):在項(xiàng)目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屬性值(多個(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)目依賴的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依賴插件,直接在對(duì)項(xiàng)目使用mvn復(fù)制依賴jar包的命令,這種方式需要挨個(gè)對(duì)各個(gè)子項(xiàng)目進(jìn)行依賴復(fù)制,子項(xiàng)目少可以使用。

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

將各項(xiàng)目導(dǎo)出的依賴jar包,統(tǒng)一放入一個(gè)文件夾中,去除重復(fù),并刪除fat jar中預(yù)留存的依賴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包依賴關(guān)系視具體情況更改。

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

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

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

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

至此,我懷疑項(xiàng)目中沒有這個(gè)jar包,反復(fù)打包后,我看到,此問題jar包的確在項(xiàng)目依賴中,只是隱藏的太深。于是,只能針對(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包的依賴關(guān)系,并在項(xiàng)目中排除了該jar包,再次打包后項(xiàng)目啟動(dòng)成功,問題解決。

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

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

新聞名稱:怎么在springboot項(xiàng)目中使用fatjar實(shí)現(xiàn)瘦身-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.rwnh.cn/article0/csdgoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、電子商務(wù)、微信公眾號(hào)微信小程序、手機(jī)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
奉新县| 志丹县| 日土县| 昆明市| 宁安市| 武汉市| 武乡县| 千阳县| 文成县| 洞口县| 多伦县| 灵璧县| 扶沟县| 顺昌县| 清丰县| 五常市| 驻马店市| 昌图县| 孟村| 腾冲县| 凤庆县| 石河子市| 青州市| 东乡县| 博乐市| 宁武县| 商都县| 土默特左旗| 曲沃县| 军事| 景宁| 酒泉市| 抚宁县| 叙永县| 泉州市| 都江堰市| 广水市| 新邵县| 洛浦县| 临江市| 新营市|