一.衝突問題
比如項目中引用了兩個 fastjson.jar的版本,分別爲
fastjson:1.2.28
fastjson:1.2.3
我們用到了1.2.28中的某個類, 比如 A類,在版本更新中 1.2.3版本去掉了這個類,然而我們項目中maven 卻把1.2.3的 jar 打包進去了,那我們就會報異常,不存在這個 class,但是我們調錯誤的時候卻發現這個類存在,那我們怎麼找到問題根源呢,到底是哪個包的需要Exclude 呢?
idea 中查看 maven 依賴只會給你一個複雜到極點圖,基本沒有啥價值,所以要安裝個插件 maven helper
二.解決問題
(1)首先安裝插件 maven helper(因爲我已經安裝了,所以沒 install 的按鈕了)
(2)安裝完成後,在 pom 文件下方會出現這個東西
(3)點進去你會發現彷彿回到了 eclipse
(4)接下來到重點了,選中衝突選項 conflicts,這一列都是存在衝突的包
(5)以fastjson 爲例
(6)當然我們調錯誤的時候也可以直接搜索有問題的包,如下
(7)選中右鍵就可以 Exclude 啦,想用1.2.28就把其他版本的Exclude掉,想用1.2.3就把其他版本的Exclude掉,是不是很方便。
三.鎖定jar版本
面對衆多的依賴,有一種方法不用考慮依賴路徑、聲明優化等因素可以採用直接鎖定版本的方法確定依賴構件的版本,版本鎖定後則不考慮依賴的聲明順序或依賴的路徑,以鎖定的版本的爲準添加到工程中,此方法在企業開發中常用。
如下的配置是鎖定了spring-beans和spring-context的版本
<dependencyManagement>
<dependencies>
<!--這裏鎖定版本爲4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
注意:在工程中鎖定依賴的版本並不代表在工程中添加了依賴,如果工程需要添加鎖定版本的依賴則需要單獨添加<dependencies></dependencies>標籤,如下:
<dependencies>
<!--這裏是添加依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>
上邊添加的依賴並沒有指定版本,原因是已在<dependencyManagement>中鎖定了版本,所以在<dependency>下不需要再指定版本。