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包冲突的三种方式,建议使用第三种,更加直观。

    你所看得到的天才不过是在你看不到的时候还在努力罢了!
  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11235153.html
Copyright © 2011-2022 走看看