溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何實(shí)現(xiàn)SpringBoot框架打包體積簡(jiǎn)化

發(fā)布時(shí)間:2020-07-28 09:40:11 來(lái)源:億速云 閱讀:374 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要講解了如何實(shí)現(xiàn)SpringBoot框架打包體積簡(jiǎn)化,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

Springboot 框架極大的的簡(jiǎn)化了代碼的框架集成開(kāi)發(fā),想當(dāng)年還是用ssm框架組合時(shí),那種配置令人頭疼,還有Springboot框架自帶tomcat服務(wù)器,簡(jiǎn)化了我們的環(huán)境搭建。但是Springboot框架自帶tomcat服務(wù)器也有問(wèn)題,就是導(dǎo)致一個(gè)服務(wù)很大,比如一個(gè)簡(jiǎn)單的業(yè)務(wù)系統(tǒng),可能因?yàn)閷?dǎo)入的第三方j(luò)ar包比較多,導(dǎo)致打包出來(lái)的jar非常大。假如是內(nèi)網(wǎng)上傳至服務(wù)器,還好,但是假如是在阿里云這種云服務(wù)器,就很考驗(yàn)帶寬的上行速度了。比如我家50M寬帶,下行很快,但上行才3M,一個(gè)jar包100M,我微調(diào)一下重新部署,這中間的時(shí)間就是10分鐘去了。所以也在琢磨如何簡(jiǎn)化jar包。

下圖是spingboot框架打出來(lái)的jar目錄情況

如何實(shí)現(xiàn)SpringBoot框架打包體積簡(jiǎn)化

在BOOT-INF下面

如何實(shí)現(xiàn)SpringBoot框架打包體積簡(jiǎn)化

這個(gè)lib下面就是第三方j(luò)ar包。

下面就來(lái)簡(jiǎn)化它吧。

我的項(xiàng)目目錄結(jié)構(gòu)如下

course
  course-common
  course-pojo
  course-service
  course-web

Web中包含springboot框架main啟動(dòng)入口,打包時(shí),會(huì)將 course-common、course-pojo、course-service 這三個(gè)服務(wù)打成jar包,集成在 course 最終的jar里lib目錄下。

修改course-web服務(wù)的pom文件

<build>
    <finalName>mml-course</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <outputDirectory>E:\JARS\pre</outputDirectory>
          <layout>ZIP</layout>      <!—- 必須加這句話(huà) -->
          <includes>      <!—- 表示項(xiàng)目打包時(shí)集成哪些jar包-->
            <include>
              <groupId>com.mml</groupId>
              <artifactId>mml-course-service</artifactId>
            </include>
            <include>
              <groupId>com.mml</groupId>
              <artifactId>mml-course-pojo</artifactId>
            </include>
            <include>
              <groupId>com.mml</groupId>
              <artifactId>mml-course-common</artifactId>
            </include>
          </includes>
        </configuration>
      </plugin>
    </plugins>

重點(diǎn)關(guān)注兩處,layout 和 includes 。

layout 是為了 springboot jar簡(jiǎn)化后能夠加載第三方j(luò)ar包目錄,如果沒(méi)加入這句話(huà),在待會(huì)兒?jiǎn)?dòng)時(shí),會(huì)報(bào)錯(cuò)。

includes 是指包含哪些項(xiàng)目的jar包,因?yàn)槲翼?xiàng)目結(jié)構(gòu)的問(wèn)題,我必須將 service 、pojo、common這三個(gè)項(xiàng)目打包進(jìn)去。假如你的項(xiàng)目中沒(méi)有自己項(xiàng)目依賴(lài)可以寫(xiě)成如下格式,表示不包含任何jar包。

<includes>
  <include>
    <groupId>nothing</groupId>      
    <artifactId>nothing</artifactId>
  </include>
</includes>

修改完pom.xml后,執(zhí)行 mvn clean package 命令打包出來(lái)的springboot項(xiàng)目jar包大小會(huì)從100M縮小到100K,此時(shí)的jar包并不能直接運(yùn)行,因?yàn)闆](méi)有這些第三方依賴(lài)。

上傳至服務(wù)器,速度會(huì)快很多,原來(lái)的jar包運(yùn)行命令是

nohub java –jar mml-course.jar > ./logs/course.out 2>&1 &

nohub 表示后臺(tái)執(zhí)行這個(gè)jar。

現(xiàn)在需要改成如下格式

nohub java –Dloader.path=/path/lib –jar mml-course.jar > ./logs/course.out 2>&1 &

加入了 –Dloader.path=/path/lib , /path/lib 根據(jù)實(shí)際的第三方j(luò)ar所在目錄,當(dāng)然也可以加載多個(gè)地址,用,分隔就好了。一定要在pom中加入<layout>ZIP</layout>,否則這步無(wú)法加載第三方j(luò)ar目錄,導(dǎo)致報(bào)錯(cuò)。

看完上述內(nèi)容,是不是對(duì)如何實(shí)現(xiàn)SpringBoot框架打包體積簡(jiǎn)化有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI