您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在maven項目中j對ar包進行瘦身,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、將環(huán)境中已包含的依賴包的scope設(shè)置為provided
pom中依賴的部分包可能在你程序運行環(huán)境中已經(jīng)包含,此時應(yīng)該將依賴包的scope設(shè)置為provided。如protobuf包如在環(huán)境中已包含,則應(yīng)設(shè)置為:
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>${protobuf.version}</version> <scope>provided</scope> </dependency>
在pom文件配置時可能加入的某些依賴包并沒有真正被使用到,那么有沒有一種有效的方式找到?jīng)]有被使用到的依賴包呢?答案是Apache Maven Dependency Plugin。
安裝Apache Maven Dependency Plugin插件并運行mvn dependency:analyze命令來分析項目的依賴關(guān)系,并確定哪些依賴是:使用且聲明的、使用且未聲明的和未使用且聲明的。將未使用且聲明的的依賴從pom文件中去除即可。
如果你使用的是Spring Boot,可以直接添加這個插件
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> </plugin> </plugins> </build>
在pom文件中有些依賴可能在<dependencies/>
或<dependencyManagement/>
中被重復(fù)配置,或者父子項目配置中可能同一個依賴包被重復(fù)配置??赏ㄟ^Apache Maven Dependency Plugin
插件并運行mvn dependency:analyze-duplicate
命令來檢查項目的重復(fù)依賴,然后刪除重復(fù)依賴項即可。
項目中不同的依賴包可以同時依賴另一個包,而這個嵌套依賴的包可能版本不一致,這可能導(dǎo)致程序無法正常運行,或者運行過程中產(chǎn)生一些很詭異的問題。
那如何方便地找到所有的依賴沖突項并解決呢?在intellij中安裝maven helper插件可快速找出有沖突的包。
安裝完maven helper后,然后打開pom文件,并從Text模式切換到Dependency Analyzer模式,選中Conflicts按鈕,可清晰地看到有沖突依賴包都被標(biāo)紅顯示出來了。
選中紅色嵌套包并右鍵選擇Exclue即可,實際的效果是在pom文件中對應(yīng)的dependency下將嵌套包exclusion出去了。
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.manager}</version> <exclusions> <exclusion> <artifactId>jboss-logging</artifactId> <groupId>org.jboss.logging</groupId> </exclusion> </exclusions> </dependency>
某些場景下exclusion沖突的不同版本的依賴包會導(dǎo)致程序無法執(zhí)行,可能的原因是該依賴包無法在其嵌套包的其他版本下正常運行。此時可能需要嘗試找一個新版本的依賴包使其依賴的嵌套包能與其他依賴包達到兼容。
如果采取了上面幾個步驟后還是無法達到j(luò)ar包有效瘦身的目標(biāo),那就只能使用最終大殺器:將不需要的指定文件或者文件夾從最終的jar包中移除。
之所以有不需要的文件被打到j(luò)ar包,一方面可能工程中包含了一些非代碼的工程文件,如項目文檔等;另一方面可能你依賴的jar包中包含了不需要的冗余文件。
使用maven-shade-plugin
插件可將匹配特定條件的文件從jar包中移除。如下所示,配置exclude項可從最終的jar包中去除匹配特定條件的文件或文件夾(可以是配置文件,也可以是代碼文件)。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <id>uber-jar</id> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName> <filters> <filter> <artifact>*:* </artifact> <excludes> <exclude>LICENSE</exclude> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
關(guān)于如何在maven項目中j對ar包進行瘦身就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。