1. 程式人生 > >jar 包衝突解決辦法

jar 包衝突解決辦法

jar包衝突常見的異常為找不到類(java.lang.ClassNotFoundException)、

找不到具體方法(java.lang.NoSuchMethodError)、

欄位錯誤( java.lang.NoSuchFieldError)

或者類錯誤(java.lang.LinkageError);

1 通過mvn dependency:tree  >  tree.txt 匯出全部的依賴。 可以使用 -Dverbose 、-Dincludes或者-Dexcludes引數來精確定位導致衝突的jar包。

這裡我們對我們執行的命令做一個簡單的說明。
mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>


第一部分mvn dependency:tree是maven依賴的分析命令,作用是對我們的專案的依賴進行分析,並輸出專案依賴樹
第二部分-Dverbose的作用是添加了verbose一個環境變數,起的作用是在分析專案依賴時輸出明細,這樣專案中依賴的所有引用都會被輸出出來,包含了所有的間接引用,會有很多很多,我們只需要我們要找的,所以就需要第三個引數了

第三部分-Dincludes=<groupId>:<artifactId>的作用就是進行過濾,只包含我們想要的依賴的依賴時,排除掉其它不需要的,依賴樹的所有葉子節點就是我們的找的依賴包。其中的groupId和artifactId可以只填寫一個,為了保證準確性,一般都會填兩個(填寫時不包括尖括號)。


對於maven工程,使用eclipse來解決,點開pom.xml,切換到hierarchy dependency,右上角搜尋對應的包,可以清晰地看到衝突版本。

可以使用新增jvm引數的方式啟動程式,將類載入的具體jar資訊打印出來;-verbose:class