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í)行一下命令找出哪里的依賴沖突了比較好。
