Maven 依賴jar包版本沖突解決

Java的強(qiáng)大之處就是在于它的生態(tài)環(huán)境,有眾多的輪子支持復(fù)雜項(xiàng)目的開(kāi)發(fā)?,F(xiàn)在基本上每個(gè)稍微有點(diǎn)規(guī)模的Java項(xiàng)目都會(huì)依賴到眾多的jar包,而Maven應(yīng)該是目前管理jar包依賴最流行的工具。然而,過(guò)多復(fù)雜的jar包依賴就可能造成版本沖突問(wèn)題。比如:

項(xiàng)目依賴A和B;A依賴C1.0,B依賴C2.0,如果C的兩個(gè)版本不兼容,我們的項(xiàng)目就會(huì)出現(xiàn)問(wèn)題。

像例子中這樣的C在還是很多的,最常見(jiàn)的就屬apache的一堆工具包,比如commons-logging;

沖突解決方法:
1 分析沖突的jar包的依賴路徑

mvn dependency:tree -Dverbose -Dincludes=commons-logging:commons-loggging

這條命令可以打印出所有依賴了groupId和artifactId都為commons-logging的jar包的依賴路徑。

2 選擇一個(gè)所需的版本
在兩個(gè)沖突的版本中,我們?cè)谧约旱捻?xiàng)目中用到了哪個(gè)版本的語(yǔ)法,就選擇哪個(gè)。

3 在本項(xiàng)目的pom中將沖突的依賴排除:
具體寫(xiě)法:
比如我們要將一個(gè)依賴中的相應(yīng)的jar包排除:
Java
<dependency>
<groupId>com.xxx.xx</groupId>
<artifactId>xxx</artifactId>
<version>x</version>
<exclusions>
<exclusion>
<artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>

最后推薦一下intellij,在intellij中打開(kāi)你的pom.xml,右鍵單擊內(nèi)容,選擇diagram->show dependencies, 會(huì)自動(dòng)執(zhí)行mvn:dependency 并繪制一個(gè)依賴樹(shù),列出所有的依賴包如下圖所示。想要排除哪個(gè),可以直接右鍵選擇"exclude".不過(guò)目前我還沒(méi)發(fā)現(xiàn)怎樣像命令行一樣過(guò)濾樹(shù)的結(jié)果,所有如果依賴太多,還是先執(zhí)行一下命令找出哪里的依賴沖突了比較好。

![dependency.jpg](http://upload-images.jianshu.io/upload_images/1713176-1b64d1abc8bd6ebd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容