Maven中解決jar包沖突的三種方式


首先我們在idea中創建一個maven工程,我們只關注pom.xml以及External Libraries中導入的jar包

導入spring-beans.jar

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

再看左側

再看下jar包依賴

可以發現spring-beans.jar依賴於spring-core.jar

spring-core.jar依賴於commons-logging,當然這也是spring唯一依賴的外部jar包

一、路徑最短原則

那如果我們手動添加了一個spriing-core.jar,但是版本號是4.3.18,那么最終引入的依賴是哪個呢?


當然是4.3.18版本的,這是因為寫在pom.xml是直接依賴,而由spring-bean.jar引入的spring-core.jar是間接依賴,直接依賴優先於間接依賴。

二、聲明優先原則

讓我們回到開始 的情況,

我們加入spring-context.jar,

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.1.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.18.RELEASE</version>
    </dependency>
  </dependencies>

我們看下依賴樹:


以發現spring-beans.jarspring-context.jar都依賴於spring-core.jar,

那猜一下,按上面這種方式,是導入了兩個版本的spring-core呢?還是導入了一個版本的呢,導入一個版本的那么它的版本號是多少呢?

現在再來看導入的依賴


發現導入的是4.1.2

現在換下兩個依賴的位置

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.18.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.1.2.RELEASE</version>
    </dependency>
  </dependencies>

再來看導入的依賴

發現導入spring-core變成了4.3.18的版本

這就是聲明優先原則,即在pom.xml中所處的位置越靠前,越優先。

三、直接排除法(推薦使用)

此時我們手動排除掉目前的4.3.18版本的spring-core.jar

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.18.RELEASE</version>
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.1.2.RELEASE</version>
    </dependency>
  </dependencies>

再來看依賴


可以發現spring-core.jar的版本又變成了4.1.2。

這里spring-core不需要寫版本號,默認即4.3.18


以上即為maven排除Jar包沖突的三種方式,建議使用第三種,更加直觀。


免責聲明!

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



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