如何解决Maven依赖冲突
一、Java常見包沖突異常:
AbstractMethodError
NoClassDefFoundError
ClassNotFoundException
LinkageError
二、沖突分析
像上圖,就發(fā)生了包引用沖突,如果C包v0.1版本在前,JVM加載過v0.1版本里的同名類后就不會加載v0.2里的同名類,這很可能造成丟失了v0.2里同類里新增的方法屬性等等。
接下來我們看看Maven對這種情況是如何進(jìn)行管理的。
Maven 對 pom 文件的傳遞性依賴自動進(jìn)行管理, 其中有一個原則 絕對不允許最終的classpath出現(xiàn)同名不同版本的jar包 。
Maven會根據(jù)pom文件中的groupId、artifactId、version來判斷jar是否沖突,這就是規(guī)范約定的好處之一。
如果出現(xiàn)了同名不同版本的jar包,Maven的處理原則是 離你項目更近的jar包會被選中,其他的淘汰 , 這句話什么意思呢 請看下圖:
C包V0.2勝出,因為它離我們的項目更近,看圖應(yīng)該就感覺很直觀啦,
最終的classpath就是 A包、B包、D包、C包v0.2, Maven將C包v0.1排除掉啦。
三、處理沖突
1、下載Idea插件 Maven Helper
File–>setting—>Plugins—>在搜索框中填寫Maven Helper然后搜索,單擊Install按鈕進(jìn)行安裝,裝完重啟IDE。
當(dāng)Maven Helper 插件安裝成功后,打開項目中的pom文件,下面就會多出一個視圖Dependency Analyzer:
切換到此試圖即可進(jìn)行相應(yīng)操作:
Conflicts(查看沖突)
All Dependencies as List(列表形式查看所有依賴)
All Dependencies as Tree(樹形式查看所有依賴)
當(dāng)前界面上還提供搜索功能,方便使用。
切換到maven 依賴視圖選擇沖突選項,如果有沖突,在左下面區(qū)域會有紅色顯示。
2、解決沖突:
方法1:更換兼容版本
方法2:右鍵單擊紅色區(qū)域,彈出菜單選擇Exclude命令,對沖突進(jìn)行排除。
總結(jié)
以上是生活随笔為你收集整理的如何解决Maven依赖冲突的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu Conda创建环境
- 下一篇: [bzoj4833][数论][min-m