使用maven war包打包去除jar包瘦身
1、pom文件配置
1.1 添加maven-dependency-plugin插件用于將引用的jar包拷貝到指定的路徑
便于后續(xù)tomcat啟動(dòng)指定依賴(lài)包路徑
<!--拷貝依賴(lài)到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> <!--指定的依賴(lài)路徑-->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
使用這個(gè)插件構(gòu)建完之后的目錄結(jié)構(gòu)多了一個(gè)lib目錄(即上述配置的outputDirectory指定的路徑),里面是依賴(lài)的jar包:


1.2 添加maven-war-plugin插件
<!-- war包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>
<!--排除具體jar包-->
<!--WEB-INF/lib/commons-io-2.5.jar,-->
<!--WEB-INF/lib/commons-lang3-3.6.jar,-->
<!--排除不是以commons-開(kāi)頭的所有jar包-->
<!--%regex[WEB-INF/lib/(?!commons-).*.*.jar]-->
<!--排除以commons-開(kāi)頭的所有jar包-->
%regex[WEB-INF/lib/(commons-).*.*.jar]
</packagingExcludes>
</configuration>
</plugin>
上述構(gòu)建配置后打出的war包就會(huì)去除掉除war包里/WEB-INF/lib/下面相應(yīng)的jar包,使得發(fā)布包大小變小,加快上傳服務(wù)器速度,如下圖,加壓war包,查看WEB-INF/lib目錄,沒(méi)有包含commons開(kāi)頭的jar包,說(shuō)明已經(jīng)去除掉了:

原先war包里的結(jié)構(gòu)是包含很多commons開(kāi)頭的jar,如下圖:

按照上述思路我們就可以將lib下的所有jar都去掉,去掉依賴(lài)jar以后就可以通過(guò)配置tomcat引用外部lib路徑來(lái)部署項(xiàng)目了
附注:
若存在不同版本依賴(lài):比如項(xiàng)目A依賴(lài)Y庫(kù)的1.0版本,項(xiàng)目B依賴(lài)Y庫(kù)的2.0版本,那么可能會(huì)出現(xiàn)版本依賴(lài)沖突(兩個(gè)版本不兼容的情況下)
解決方案:
1、能做到版本一致就保持使用同一個(gè)版本,盡可能保證多個(gè)項(xiàng)目使用同一個(gè)庫(kù)的版本一致
2、讓項(xiàng)目各自依賴(lài)所需的版本并打進(jìn)war包中,把其他同版本的jar包放在同一個(gè)共享包下
測(cè)試發(fā)現(xiàn)依賴(lài)在查找時(shí)從上往下找,匹配到就用第一個(gè)
如下圖會(huì)使用comm-0.0.1.jar版本的

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用JDBC連接Oracle_MSSQL實(shí)例代碼
這篇文章主要介紹了Java使用JDBC連接Oracle_MSSQL實(shí)例代碼,需要的朋友可以參考下2014-01-01
Spring Schedule Task動(dòng)態(tài)改寫(xiě)Cron配置方式
這篇文章主要介紹了Spring Schedule Task動(dòng)態(tài)改寫(xiě)Cron配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java鍵盤(pán)錄入Scanner類(lèi)的使用方法詳析
在Java編程中,引用數(shù)據(jù)類(lèi)型是用來(lái)存儲(chǔ)對(duì)象的引用(地址),而Scanner類(lèi)是引用數(shù)據(jù)類(lèi)型的一種,用于讀取輸入數(shù)據(jù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
springboot+mybatis-plus 兩種方式打印sql語(yǔ)句的方法
這篇文章主要介紹了springboot+mybatis-plus 兩種方式打印sql語(yǔ)句的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
ThreadLocal簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了ThreadLocal簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
java微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能
這篇文章主要為大家詳細(xì)介紹了PHP微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Java性能工具JMeter實(shí)現(xiàn)上傳與下載腳本編寫(xiě)
性能測(cè)試工作中,文件上傳也是經(jīng)常見(jiàn)的性能壓測(cè)場(chǎng)景之一,那么 JMeter 文件上傳下載腳本怎么做,本文詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下2021-07-07

