zoukankan      html  css  js  c++  java
  • 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包冲突的三种方式,建议使用第三种,更加直观。

    你所看得到的天才不过是在你看不到的时候还在努力罢了!
  • 相关阅读:
    18.5 推挽输出和开漏输出区别
    19.3 Table 1-2.S3C2440A 289-Pin FBGA Pin Assignments (Sheet 4 of 9) (Continued)
    19.2 MEMORY CONTROLLER
    19.1 PORT CONTROL DESCRIPTIONS
    17.2 SourceInsight批量注释
    17.3 删除没用的project
    17.1 添加汇编文件并可索引
    16.2 在SecureCRT编写C程序不高亮显示
    16.1 解决SecureCRT的Home+End+Del不好用使用方法
    15.1 打开文件时的提示(不是dos格式)去掉头文件
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11235153.html
Copyright © 2011-2022 走看看