maven工程中jar包衝突原因
來個栗子:你買了一個四色筆,裏面有紅黃藍黑四種顏色。還買了一根三色筆,是紅紫綠。我想在書上做個標記,跟你借一下紅顏色的筆,你會給我哪隻呢?
當然你給我哪隻我都能用,但是在maven中可就不行了。
例如導入以下jar包:
又引入以下jar包之後:
導入contextjar包的時候因爲傳遞依賴也引入了beans,是5.0.2.RELEASE版本的,(爲了演示效果)我又引入beans5.1.8.RELEASE之後,5.0.2.RELEASE版本的beans沒有了,可是spring-context需要的是這個,這時候就產生了jar包衝突。
總結:jar包衝突的原因:傳遞依賴。
maven工程中jar包衝突解決方式
1、第一生命優先原則:哪個jar包的座標在靠上的位置,這個jar包就是先聲明的。先聲明的jar包座標下 的依賴包會優先進入項目中。
2、路徑近者優先原則:直接依賴路徑比傳遞依賴路徑近,那麼最終進入項目的jar包是路徑近的直接依賴。
3、直接排除法【推薦使用方法】:添加exclusion標籤,則其下的傳遞依賴jar包版本都和當前jar包版本相同。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
目前是學習,等以後實際開發中遇到jar包衝突的問題再來補充。