maven中導入包版本沖突的解決


導入struts包,在struts核心包的ognl包下存在javassist包:

然后再導入hibernate包,在hibernate核心下也存在javassist包:

這樣便會存在沖突,ecplise沒有辦法區分去調用哪個版本的包,所以我們應該去解決包之間的沖突。

解決方案

1.通過<excludions>標簽解決

我們如果想要使用較高版本的包,我們可以在低版本的包上右擊,然后選擇Exclude Maven Artifact。我們可以在pom.xml中看到:

這樣便對低版本的jar包進行了限制。

2.鎖定版本

 

面對眾多的依賴,有一種方法不用考慮依賴路徑、聲明優化等因素可以采用直接鎖定版本的方法確定依賴構件的版本,版本鎖定后則不考慮依賴的聲明順序或依賴的路徑,以鎖定的版本的為准添加到工程中,此方法在企業開發中常用。

 

如下的配置是鎖定了spring-beansspring-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>下不需要再指定版本。

 

 

依賴調解原則

1.第一聲明者優先原則

pom文件定義依賴,先聲明的依賴為准。

Struts-spring-plugins包下有一個:Spring-bean-4.2.4

spring-context包下有一個:Spring-bean-4.2.5

測試:

如果將上邊struts-spring-pluginsspring-context順序顛倒,系統將導入spring-beans-4.2.4

分析:

由於spring-context在前邊以spring-context依賴的spring-beans-4.2.4為准,所以最終spring-beans-4.2.4添加到了工程中。

2、路徑近者優先原則

 

例如:A依賴 spirng-beans-4.2.4A依賴B依賴 spirng-beans-3.0.5,則spring-beans-4.2.4優先被依賴在A中,因為spring-beans-4.2.4相對spirng-beans-3.0.5A依賴的路徑最近。

 

測試:

 

在本工程中的pom中加入spirng-beans-4.2.4的依賴,根據路徑近者優先原則,系統將導入spirng-beans-4.2.4

 

<dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>4.2.4.RELEASE</version>
      </dependency>

 

排除依賴

上邊的問題也可以通過排除依賴方法輔助依賴調解,如下:

比如在依賴struts2-spring-plugin的設置中添加排除依賴,排除spring-beans,

下邊的配置表示:依賴struts2-spring-plugin,但排除struts2-spring-plugin所依賴的spring-beans。

<!-- struts2-spring-plugin依賴spirng-beans-3.0.5 -->
      <dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-spring-plugin</artifactId>
          <version>2.3.24</version>
          <!-- 排除 spring-beans-->
          <exclusions>
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-beans</artifactId>
              </exclusion>
            <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM