Java的強(qiáng)大之處就是在于它的生態(tài)環(huán)境锌仅,有眾多的輪子支持復(fù)雜項目的開發(fā)。現(xiàn)在基本上每個稍微有點(diǎn)規(guī)模的Java項目都會依賴到眾多的jar包瞎抛,而Maven應(yīng)該是目前管理jar包依賴最流行的工具艺演。然而,過多復(fù)雜的jar包依賴就可能造成版本沖突問題桐臊。比如:
項目依賴A和B胎撤;A依賴C1.0,B依賴C2.0断凶,如果C的兩個版本不兼容伤提,我們的項目就會出現(xiàn)問題。
像例子中這樣的C在還是很多的认烁,最常見的就屬apache的一堆工具包肿男,比如commons-logging;
沖突解決方法:
1 分析沖突的jar包的依賴路徑
mvn dependency:tree -Dverbose -Dincludes=commons-logging:commons-loggging
這條命令可以打印出所有依賴了groupId和artifactId都為commons-logging的jar包的依賴路徑。
2 選擇一個所需的版本
在兩個沖突的版本中却嗡,我們在自己的項目中用到了哪個版本的語法舶沛,就選擇哪個。
3 在本項目的pom中將沖突的依賴排除:
具體寫法:
比如我們要將一個依賴中的相應(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中打開你的pom.xml,右鍵單擊內(nèi)容如庭,選擇diagram->show dependencies, 會自動執(zhí)行mvn:dependency 并繪制一個依賴樹,列出所有的依賴包如下圖所示撼港。想要排除哪個坪它,可以直接右鍵選擇"exclude".不過目前我還沒發(fā)現(xiàn)怎樣像命令行一樣過濾樹的結(jié)果,所有如果依賴太多帝牡,還是先執(zhí)行一下命令找出哪里的依賴沖突了比較好往毡。
![dependency.jpg](http://upload-images.jianshu.io/upload_images/1713176-1b64d1abc8bd6ebd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)