springBoot Maven 剔除無用的jar引用問題記錄

當(dāng)項(xiàng)目經(jīng)過一段時(shí)間的開發(fā)和維護(hù)后,經(jīng)常會(huì)遇到項(xiàng)目打包速度變慢的問題。這通常與項(xiàng)目中包含大量的jar依賴有關(guān),這些依賴之間的關(guān)系錯(cuò)綜復(fù)雜。這種情況在項(xiàng)目維護(hù)過程中是非常常見的。由于開發(fā)人員在修復(fù)bug或開發(fā)新功能時(shí),往往會(huì)簡單地向項(xiàng)目中添加新的jar依賴,而沒有對(duì)現(xiàn)有依賴進(jìn)行清理或優(yōu)化。因此,我們需要一種方法來分析項(xiàng)目中哪些jar依賴是真正被使用的,哪些依賴則可能已經(jīng)不再需要,從而幫助我們優(yōu)化項(xiàng)目結(jié)構(gòu),提高構(gòu)建效率。
我們可以使用Maven analyze來進(jìn)行分析,使用如下命令:
mvn dependency:analyze
在idea的終端輸入命令,則會(huì)輸出如下的日志:

當(dāng)你運(yùn)行 mvn dependency:analyze 命令時(shí),Maven 會(huì)對(duì)項(xiàng)目的依賴進(jìn)行分析,并報(bào)告一些潛在的問題。日志中的Used undeclared dependencies found和Unused declared dependencies found是兩個(gè)常見的警告信息。
Used undeclared dependencies found
Used undeclared dependencies found這個(gè)警告表示項(xiàng)目中使用了某些未在 pom.xml 文件中聲明的依賴。但是它并不是直接的依賴(就是說沒有在pom中直接聲明),是通過引入傳遞下來的包。換句話說,項(xiàng)目中有一些類或資源是從這些未聲明的依賴中引用的,但這些依賴沒有被明確地添加到項(xiàng)目的依賴管理中。
舉個(gè)例子:project在pom中聲明了A.jar的依賴(沒有聲明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的代碼 這個(gè)時(shí)候你就可以把B.jar直接聲明在pom中。
Unused declared dependencies found
Unused declared dependencies found這個(gè)警告表示項(xiàng)目中聲明了一些沒有被使用的依賴。換句話說,這些依賴在項(xiàng)目中沒有任何引用或使用。
假設(shè)你在 pom.xml 中聲明了一個(gè)依賴 com.example:example-lib,但在項(xiàng)目代碼中并沒有使用任何來自該庫的類或資源。運(yùn)行 mvn dependency:analyze 后,你會(huì)看到類似如下的警告:
[WARNING] Unused declared dependencies found:
com.example:example-lib:jar:1.0.0:compile
但是這里我們需要注意:這里說的實(shí)際代碼沒有用到,指的是在main/java和test里沒有用的,但是并不是意味著真的沒有用到這些包,有可能配置文件中引用或者其他擴(kuò)展點(diǎn)自動(dòng)加載這些包,所以我們?cè)趧h除依賴的時(shí)候一定要小心,做好備份,因?yàn)檫@類引用maven是分析不出來的。
要注意的還有,這個(gè)檢測的結(jié)果僅供參考,有時(shí)也不準(zhǔn)確,如org.projectlombok:lombok:jar:1.16.20:provided,實(shí)際上在項(xiàng)目中有使用到它的注解@Data,這個(gè)屬于誤判。要注意剔除依賴后多測試,工具畢竟有畢竟的缺陷性。
對(duì)于這種,最好是先注釋,測試沒有問題的話再刪除,這樣也不用做備份,隨時(shí)取消注釋。
此外,我們?cè)谛马?xiàng)目建立時(shí),引用jar包時(shí)要慎重,不要一股腦兒直接拷貝老項(xiàng)目的依賴,避免后期又花時(shí)間來剔除。
到此這篇關(guān)于springBoot Maven 剔除無用的jar引用的文章就介紹到這了,更多相關(guān)springBoot Maven jar引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文淺析Java金額計(jì)算用long還是BigDecimal
在Java后端開發(fā)中處理與錢有關(guān)的業(yè)務(wù)時(shí),確保金額計(jì)算的準(zhǔn)確性和避免錯(cuò)誤非常重要,這篇文章主要給大家介紹了關(guān)于Java中處理金額計(jì)算之使用Long還是BigDecimal的相關(guān)資料,希望對(duì)大家有所幫助2025-12-12
Mybatis報(bào)錯(cuò)mapkey is required問題及解決
這篇文章主要介紹了Mybatis報(bào)錯(cuò)mapkey is required問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Java讀取JSON文件并將其中元素轉(zhuǎn)為JSON對(duì)象輸出的方式
這篇文章主要介紹了Java讀取JSON文件并將其中元素轉(zhuǎn)為JSON對(duì)象輸出的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-10-10
Java實(shí)現(xiàn)后端和前端的接口數(shù)據(jù)加密方案詳解
這篇文章主要為大家詳細(xì)介紹了一種基于橢圓曲線集成加密方案(ECIES)的前后端數(shù)據(jù)安全交互方法,該方案通過橢圓曲線密碼學(xué)實(shí)現(xiàn)密鑰協(xié)商,結(jié)合AES對(duì)稱加密保障數(shù)據(jù)傳輸安全,感興趣的小伙伴可以了解下2026-04-04
SpringBoot?將配置文件掛到?jar?包外面的操作方法
在 SpringBoot 中,可以將配置文件放在 jar 包外面,這樣可以方便地修改配置而不需要重新打包和部署,這篇文章主要介紹了SpringBoot?如何將配置文件掛到?jar?包外面,需要的朋友可以參考下2023-03-03
Spring Boot場景啟動(dòng)器(Starters)從入門到精通
本文給大家介紹Spring Boot場景啟動(dòng)器(Starters)完全指南:從入門到精通,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-10-10

