idea 中解決maven 包衝突的問題(maven helper)

一.衝突問題

比如項目中引用了兩個 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>下不需要再指定版本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章