Maven之分析剔除無用的jar引用問題
Maven分析剔除無用的jar引用
當(dāng)項目開發(fā)維護(hù)了一段時間時,經(jīng)常會有項目打包速度慢,jar依賴多,依賴關(guān)系錯綜復(fù)雜,這種問題是項目維護(hù)最常見的問題,由于開發(fā)人員在bugfix或者feature開發(fā)時往往只是往項目中添加jar依賴,那我們?nèi)绾畏治龀鲰椖恐心男┮蕾囀怯玫降模男┮蕾囀遣挥玫模?/p>
使用Maven analyze來進(jìn)行分析
使用如下命令:
mvn dependency:analyze
會輸出如下的日志:
[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ xxxproject ---
[WARNING] Used undeclared dependencies found:
[WARNING] org.springframework:spring-beans:jar:4.0.0.RELEASE:compile
[WARNING] org.springframework:spring-context:jar:4.0.0.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING] com.alibaba:dubbo:jar:2.5.3:compile
[WARNING] com.baidu.disconf:disconf-client:jar:2.6.32:compile
[WARNING] org.mybatis:mybatis:jar:3.2.7:compile
[WARNING] org.mybatis:mybatis-spring:jar:1.2.2:compile
[WARNING] mysql:mysql-connector-java:jar:5.1.41:compile
[WARNING] com.alibaba:druid:jar:1.0.9:compile
[WARNING] com.github.sgroschupf:zkclient:jar:0.1:compile
[WARNING] org.apache.zookeeper:zookeeper:jar:3.4.6:compile
[WARNING] org.springframework:spring-jdbc:jar:4.0.0.RELEASE:compile
[WARNING] org.slf4j:log4j-over-slf4j:jar:1.7.5:compile
[WARNING] org.slf4j:jcl-over-slf4j:jar:1.7.5:runtime
[WARNING] ch.qos.logback:logback-classic:jar:1.0.13:compile
我們就來說一下日志中的
Used undeclared dependencies found
和 Unused declared dependencies found
Used undeclared dependencies found
這個是指某些依賴的包在代碼中有用到它的代碼,但是它并不是直接的依賴(就是說沒有在pom中直接聲明),是通過引入傳遞下來的包。
舉個例子:
project
在 pom
中聲明了 A.ja
r的依賴(沒有聲明 B.jar
的依賴) A.jar
的依賴關(guān)系:
A.jar
-> B.jar
通過 mvn dependency:analyze
出現(xiàn)
[WARNING] Used undeclared dependencies found: B.jar
就說明 project
中的代碼用到了 B.jar
的代碼
這個時候你就可以把 B.jar
直接聲明在pom中
Unused declared dependencies found
這個是指我們在pom中聲明了依賴,但是在實際代碼中并沒有用到這個包!也就是多余的包。
這個時候我們就可以把這個依賴從pom中剔除。
但是這里我們需要注意:
這里說的實際代碼沒有用到,指的是在main/java和test里沒有用的,但是并不是意味著真的沒有用到這些包
有可能配置文件中引用或者其他擴展點自動加載這些包,所以我們在刪除依賴的時候一定要小心,做好備份,因為這類引用maven是分析不出來的。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java AQS(AbstractQueuedSynchronizer)源碼解析
AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下2023-02-02Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案
這篇文章主要介紹了Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10Java的優(yōu)先隊列PriorityQueue原理及實例分析
這篇文章主要介紹了Java的優(yōu)先隊列PriorityQueue原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12解決IDEA修改 .vmoptions 文件后導(dǎo)致無法啟動的問題
這篇文章主要介紹了解決IDEA修改 .vmoptions 文件后導(dǎo)致無法啟動的問題,需要的朋友可以參考下2020-12-12struts2簡介_動力節(jié)點Java學(xué)院整理
Struts2框架是MVC流程框架,適合分層開發(fā),這篇文章主要為大家詳細(xì)介紹了struts2簡介的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09