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