用maven工具解決jar包衝突問題或重複載入問題
阿新 • • 發佈:2019-01-06
在使用maven開發專案的過程中,經常會遇到jar包重複載入或者jar包衝突的問題的,但是由於有些jar是由於maven的依賴載入自動載入進來的,
而不是開發者自己配置的,特別是當專案中pom中配置的jar包依賴本身很多時,開發者靠自己的經驗,有時很難找出是哪個jar的載入導致載入了
多餘的依賴jar,從而產生衝突。
今天剛好遇到一個借用eclipse中的maven外掛解決jar包依賴衝突的問題,分享一下。
專案中出現的問題如下:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory
後經網上搜索加邊上大牛指點發現:
log4j-over-slf4j.jar 和 slf4j-log4j12.jar 在同一個classpath下就會出現這個錯誤。
解決方法:
將slf4j-log4j12.jar從相關的jar中排除
但是檢視maven專案中的pom檔案,自己並沒有配置這個jar的依賴,猜測是maven載入其他jar引入的依賴包。
開啟pom.xml檔案,在Dependency Hierarchy(依賴列表)中檢視jar包的依賴層次關係。
在過濾欄中輸入log4j,右側出現了log4j相關包的依賴結構,左側則是pom.xml全部依賴包的列表展示。
直接在右側選中zookeeper底下的slf4j的jar包,右鍵選擇Exclude,然後儲存pom.xml。這樣在載入zookeeper的jar包時就不會再載入slf4j的jar包。
修改後對應的dependency檔案如下:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId >
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
這樣就能通過filter過濾快速找到對應jar,並知道他的依賴關係,快速解決專案中的jar包衝突問題。