日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法

發布時間:2025/3/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目中,經常會遇到ClassNotFound,NoSuchMethod異常,第一反應往往是類路徑不對,jar沒有正確的引用。第一步判斷jar是否加載,還是 加載的jar由于maven依賴管理存在傳遞依賴,造成依賴的jar版本號不對,相應的類找不到,或者是相應類版本不對,沒有對應的方法。

一 造成jar 沖突的原因:如果項目中存在對同一jar不同版本依賴的時候,maven 2根據最近原則,默認引用最靠近項目版本的jar,maven 2.0.9會根據最先聲明原則 來引用相應版本的jar;無論那種方式,都會出現jar包沖突。在這里提一下gradle依賴,會依賴最新版本的jar。

二 判斷jar是否正確的被引用 有兩種方法:

1在項目啟動時加上VM參數:-verbose:class

項目啟動的時候會把所有加載的jar都打印出來 類似如下的信息:

classpath加載的jar

-classpath /home/yao/tool/jdk1.8.0_25/jre/lib/jce.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/resources.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/management-agent.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/jfxswt.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/plugin.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/javaws.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/charsets.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/jsse.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/deploy.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/jfr.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/ext/localedata.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/ext/nashorn.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/ext/jfxrt.jar:

/home/yao/tool/jdk1.8.0_25/jre/lib/ext/sunjce_provider.jar:

...............等等

具體load的類

[Loaded java.lang.Object from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.io.Serializable from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.Comparable from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.CharSequence from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.String from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.reflect.AnnotatedElement from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.reflect.GenericDeclaration from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.reflect.Type from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

[Loaded java.lang.Class from /home/yao/tool/jdk1.8.0_25/jre/lib/rt.jar]

..................等等

我們可以通過上面的信息查找對應的jar是否正確的被依賴,具體類加載情況,同時可以看到版本號,確定是否由于依賴沖突造成的jar引用不正確;

2 通過maven自帶的工具:??mvn dependency:tree

具體后面可以加 -Dverbose 參數 ,詳細參數可以去自己搜,這里不詳細介紹。

比如分析如下POM

運行: mvn dependency:tree -Dverbose

org.apache.poi

poi

3.2-FINAL

commons-beanutils

commons-beanutils

1.7.0

輸出結果:

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ Dependency ---

[INFO] com.yao:Dependency:pom:1.0-SNAPSHOT

[INFO] +- org.apache.poi:poi:jar:3.2-FINAL:compile

[INFO] | +- commons-logging:commons-logging:jar:1.1:compile

[INFO] | | \- log4j:log4j:jar:1.2.13:compile

[INFO] | \- (log4j:log4j:jar:1.2.13:compile - scope updated from runtime; omitted for duplicate)

[INFO] \- commons-beanutils:commons-beanutils:jar:1.7.0:compile

[INFO] \- (commons-logging:commons-logging:jar:1.0.3:compile - omitted for conflict with 1.1)

[INFO] ------------------------------------------------------------------------

通過里面的信息可以看到 兩個jar都commons-logging存在依賴,但是版本不同。里面的詳細信息顯示引用了 commons-logging:commons-logging:jar:1.1 去掉了commons-logging:commons-logging:jar:1.0.3 (omitted for duplicate)。

通過以上方法我們可以看到項目中引用jar版本號;接下來就是如何排除掉我們不想要版本的jar;

三 通過Idea intellij 中的Show Dependencies的工具去除重復的jar

在Pom.xml文件上右擊 選擇 Diagrams -> Show Dependencies 即可查看Pom的依賴圖,通過圖可以很容易的看到依賴沖突的jar,exculude掉不想要的版本jar即可。

總結

以上是生活随笔為你收集整理的maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。