Maven解决jar包版本冲突
jar沖突原因:
jar包沖突主要是由于依賴傳遞導致的,不同的jar包依賴同一個不同版本的jar包,導致沖突。可以看下下圖。
B和C都依賴D,但是不同的版本,所以在使用的過程中可能會出現問題。
依賴調解原則(內置解決方法)
maven沖突這是常有的事,所以maven本身提供了一些基本的解決辦法,maven內置了三個基本的原則
原則一:最短路徑優先
原則二:第一聲明者優先
原則三:覆蓋優先
下面的三張圖,最終選擇的都是高版本的jar包
?
這是maven自動做的依賴解決,也就是不需要做任何處理。
手動解決依賴沖突?
先說兩個方法,然后在說下怎么做
-
排除依賴:用于排除某項依賴的依賴jar包
-
版本鎖定
排除依賴就是在依賴庫中排除對應版本的jar包,斷開依賴,在程序運行的時候會尋找其他的對應的版本API
?版本鎖定就是在pom中直接聲明對應的jar包版本,maven就不會依賴其他的版本了,這個需要原理是基于groupId 和 artifactId 做定位。
maven插件
因為我使用的是idea,所以直接在插件庫中搜索maven helper就可以了
file ->settings->plugins 打開插件的安裝界面
安裝完成之后就可以在pom 文件中看到
?
點擊之后就可以看到沖突的jar包
實例解決?
由上面的圖可以看到
easyexcel 依賴的asm 是7.1
spring-cloud-starter-netflix-hystrix 依賴的asm 是5.0.4
在依賴的樹上可以看到優先聲明的是spring-cloud-starter-netflix-hystrix ,所以當前系統使用的版本是5.0.4,導致在調用easyexcel的時候報錯
解決方案:
將easyExcel 聲明在最前面
排除5.0.4 版本,注意 exclusions 的使用
手動寫pom
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><exclusions><exclusion><artifactId>asm</artifactId><groupId>org.ow2.asm</groupId></exclusion></exclusions> </dependency>使用maven helper,在需要排除的版本右鍵,選擇exclude,最終產生的代碼就像上面
鎖定版本
<dependency><artifactId>asm</artifactId><groupId>org.ow2.asm</groupId><version>7.1</version> </dependency>解決辦法總結
內置:
-
原則一:最短路徑優先
-
原則二:第一聲明者優先
-
原則三:覆蓋優先
手動:
-
排除依賴:用于排除某項依賴的依賴jar包
-
版本鎖定
希望能對大家有所幫助,歡迎一鍵三連,謝謝。
總結
以上是生活随笔為你收集整理的Maven解决jar包版本冲突的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库1067错误
- 下一篇: Mybatis常见面试题(10个必备面试