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>

再看左侧
1005988-20190723231630046-1958748200.png
再看下jar包依赖
1005988-20190723231732946-377111294.png
可以发现spring-beans.jar依赖于spring-core.jar

spring-core.jar依赖于commons-logging,当然这也是spring唯一依赖的外部jar包

一、路径最短原则

那如果我们手动添加了一个spriing-core.jar,但是版本号是4.3.18,那么最终引入的依赖是哪个呢?

1005988-20190723231811902-517276766.png
当然是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>

我们看下依赖树:
1005988-20190723231857341-550110879.png


以发现spring-beans.jarspring-context.jar都依赖于spring-core.jar,

那猜一下,按上面这种方式,是导入了两个版本的spring-core呢?还是导入了一个版本的呢,导入一个版本的那么它的版本号是多少呢?

现在再来看导入的依赖

1005988-20190723231948994-385602653.png
发现导入的是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>

再来看导入的依赖
1005988-20190723232026471-139973802.png

发现导入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>

再来看依赖

1005988-20190723232152823-1870715963.png
可以发现spring-core.jar的版本又变成了4.1.2。

这里spring-core不需要写版本号,默认即4.3.18


以上即为maven排除Jar包冲突的三种方式,建议使用第三种,更加直观。

转载于:https://www.cnblogs.com/heliusKing/p/11235153.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值