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

詳解如何給SpringBoot部署的jar包瘦身

 更新時間:2023年07月30日 11:25:11   作者:二進制狂人  
這篇文章主要介紹了如何給SpringBoot部署的jar包瘦身,如今迭代發(fā)布是常有的事情,每次都上傳一個如此龐大的文件,會浪費很多時間,接下來小編就以一個小項目為例,來演示如何給jar包瘦身,需要的朋友可以參考下

一、需求背景

我們知道Spring Boot項目,是可以通過java -jar 包名 啟動的。

那為什么Spring Boot項目可以通過上述命令啟動,而其它普通的項目卻不可以呢?

原因在于我們在通過以下命令打包時

mvn clean package

一般的maven項目的打包命令,不會把依賴的jar包也打包進去的,所以這樣打出的包一般都很小

但Spring Boot項目的pom.xml文件中一般都會帶有spring-boot-maven-plugin插件。

該插件的作用就是會將依賴的jar包全部打包進去。該文件包含了所有的依賴和資源文件。

也就會導致打出來的包比較大。

打完包就可以通過java -jar 包名 啟動,確實是方便了。

但當一個系統(tǒng)上線運行后,肯定會有需求迭代和Bug修復,那也就免不了進行重新打包部署。

我們可以想象一種場景,線上有一個緊急致命Bug,你也很快定位到了問題,就改一行代碼的事情,當提交代碼并完成構(gòu)建打包并交付給運維。

因為打包的jar很大,一直處于上傳中.......

如果你是老板肯定會發(fā)火,就改了一行代碼卻上傳幾百MB的文件,難道沒有辦法優(yōu)化一下嗎?

如今迭代發(fā)布是常有的事情,每次都上傳一個如此龐大的文件,會浪費很多時間。

下面就以一個小項目為例,來演示如何瘦身。

二、瘦身原理

這里有一個最基礎(chǔ) SpringBoot 項目,整個項目代碼就一個SpringBoot啟動類,單是打包出來的jar就有20多M;

我們通過解壓命令,看下jar的組成部分。

tar -zxvf spring-boot-maven-slim-1.0.0.jar

我們可以看出,解壓出來的包有三個模塊

分為 BOOT-INF,META-INF,org 三個部分

打開 BOOT-INF

classes: 當前項目編譯好的代碼是放在 classes 里面的,classes 部分是非常小的。

lib: 我們所依賴的 jar 包都是放在 lib 文件夾下,lib部分會很大。

看了這個結(jié)構(gòu)我們該如何去瘦身呢?

項目雖然依賴會很多,但是當版本迭代穩(wěn)定之后,依賴基本就不會再變動了。

如果可以把這些不變的依賴提前都放到服務器上,打包的時候忽略這些依賴,那么打出來的Jar包就會小很多,直接提升發(fā)版效率。

當然這樣做你肯定有疑問?

既然打包的時候忽略這些依賴,那通過java -jar 包名 還可以啟動嗎?

這種方式打的包,在項目啟動時,需要通過-Dloader.path指定lib的路徑,就可以正常啟動

java -Dloader.path=./lib -jar xxx.jar

三、瘦身實例演示

1、依賴拆分配置

只需要在項目pom.xml文件中添加下面的配置:

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
     <executable>true</executable>
     <layout>ZIP</layout>
     <!--這里是填寫需要包含進去的jar,
          必須項目中的某些模塊,會經(jīng)常變動,那么就應該將其坐標寫進來
          如果沒有則nothing ,表示不打包依賴 -->
     <includes>
      <include>
       <groupId>nothing</groupId>
       <artifactId>nothing</artifactId>
      </include>
     </includes>
    </configuration>
   </plugin>
   <!--拷貝依賴到j(luò)ar外面的lib目錄-->
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
     <execution>
      <id>copy</id>
      <phase>package</phase>
      <goals>
       <goal>copy-dependencies</goal>
      </goals>
      <configuration>
       <!--指定的依賴路徑-->
       <outputDirectory>
        ${project.build.directory}/lib
       </outputDirectory>
      </configuration>
     </execution>
    </executions>
   </plugin>
  </plugins>
 </build>

再次打包

mvn clean package

發(fā)現(xiàn)target目錄中多了個lib文件夾,里面保存了所有的依賴jar。

自己業(yè)務相關(guān)的jar也只有小小的168kb,相比之前20.2M,足足小了100多倍;

這種方式打的包,在項目啟動時,需要通過-Dloader.path指定lib的路徑:

java -Dloader.path=./lib -jar spring-boot-maven-slim-1.0.0.jar

雖然這樣打包,三方依賴的大小并沒有任何的改變,但有個很大的不同就是我們自己的業(yè)務包和依賴包分開了;

在不改變依賴的情況下,也就只需要第一次上傳lib目錄到服務器,后續(xù)業(yè)務的調(diào)整、bug修復,在沒調(diào)整依賴的情況下,就只需要上傳更新小小的業(yè)務包即可;

2、自己其它項目的依賴如何處理?

我們在做項目開發(fā)時,除了會引用第三方依賴,也會依賴自己公司的其它模塊。

比如

這種依賴自己其它項目的工程,也是會經(jīng)常變動的,所以不宜打到外部的lib,不然就會需要經(jīng)常上傳更新。

那怎么做了?

其實也很簡單 只需在上面的插件把你需要打進jar的填寫進去就可以了

<plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <configuration>
  <executable>true</executable>
  <layout>ZIP</layout>
  <!--這里是填寫需要包含進去的jar,如果沒有則nothing -->
   <includes>
    <include>
     <groupId>com.jincou</groupId>
     <artifactId>xiaoxiao-util</artifactId>
    </include>
   </includes>
 </configuration>
</plugin>

這樣只有include中所有添加依賴依然會打進當前業(yè)務包中。

四、總結(jié)

使用瘦身部署,你的業(yè)務包確實小了 方便每次的迭代更新,不用每次都上傳一個很大的 jar 包,從而節(jié)省部署時間。

但這種方式也有一個弊端就是增加了Jar包的管理成本,多人協(xié)調(diào)開發(fā),構(gòu)建的時候,還需要專門去關(guān)注是否有人更新依賴。

以上就是詳解如何給SpringBoot部署的jar包瘦身的詳細內(nèi)容,更多關(guān)于SpringBoot jar包瘦身的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java_Spring之XML?的?AOP?配置

    Java_Spring之XML?的?AOP?配置

    這篇文章主要介紹了Java_Spring中基于XML的AOP配置,上篇講到的是基于注解的AOP配置,對XML感興趣的同學可以參考閱讀本文
    2023-04-04
  • Java獲取接口的所有實現(xiàn)類方法總結(jié)示例

    Java獲取接口的所有實現(xiàn)類方法總結(jié)示例

    這篇文章主要給大家介紹了關(guān)于Java獲取接口的所有實現(xiàn)類方法的相關(guān)資料,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-06-06
  • Java多線程案例之單例模式懶漢+餓漢+枚舉

    Java多線程案例之單例模式懶漢+餓漢+枚舉

    這篇文章主要介紹了Java多線程案例之單例模式懶漢+餓漢+枚舉,文章著重介紹在多線程的背景下簡單的實現(xiàn)單例模式,需要的小伙伴可以參考一下
    2022-06-06
  • SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫密碼加密的方法

    SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫

    這篇文章主要介紹了SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools對數(shù)據(jù)庫密碼加密的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java的三種隨機數(shù)生成方式

    java的三種隨機數(shù)生成方式

    主要介紹了java的三種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2021-07-07
  • druid監(jiān)控無法關(guān)閉的坑以及處理方式

    druid監(jiān)控無法關(guān)閉的坑以及處理方式

    這篇文章主要介紹了druid監(jiān)控無法關(guān)閉的坑以及處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot中IP白名單控制實現(xiàn)限制接口訪問

    SpringBoot中IP白名單控制實現(xiàn)限制接口訪問

    IP白名單是一種網(wǎng)絡(luò)安全機制,通過預設(shè)允許訪問的IP地址列表實現(xiàn)對請求來源的精確控制,在Spring Boot中實現(xiàn)IP白名單有多種技術(shù)方案,下面就拉介紹一下,感興趣的可以了解一下
    2025-07-07
  • mybatis使用resultMap獲取不到值的解決方案

    mybatis使用resultMap獲取不到值的解決方案

    這篇文章主要介紹了mybatis使用resultMap獲取不到值的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot整合JSP的實現(xiàn)示例

    SpringBoot整合JSP的實現(xiàn)示例

    JSP是一種動態(tài)網(wǎng)頁技術(shù),允許開發(fā)者在 HTML中嵌入Java代碼,將 Spring Boot與JSP 合,可以創(chuàng)建具有傳統(tǒng)服務器端渲染能力的現(xiàn)代 Web 應用,下面就來詳細的介紹一下,感興趣的可以了解一下
    2025-12-12
  • SpringBoot輕松整合MongoDB的全過程記錄

    SpringBoot輕松整合MongoDB的全過程記錄

    這篇文章主要給大家介紹了關(guān)于SpringBoot輕松整合MongoDB的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論

平舆县| 灌南县| 遂平县| 剑河县| 安福县| 龙门县| 绥阳县| 盘山县| 兴义市| 涪陵区| 郧西县| 贡山| 长泰县| 宁都县| 阿城市| 资源县| 宁都县| 华池县| 江津市| 赤水市| 革吉县| 磐安县| 六盘水市| 林周县| 全州县| 武陟县| 阿勒泰市| 安义县| 增城市| 芒康县| 巴南区| 甘泉县| 新宁县| 淮滨县| 佛山市| 高邮市| 运城市| 迁西县| 张家界市| 德保县| 康马县|