解决jar包冲突问题

1、引入问题

1.1、导入jar包时maven会自动将该jar包所依赖的jar包也一起导入进来,比如spring-context依赖spring-beans、spring-beans依赖spring-core,在导入spring-context时会同时自动导入spring-beans、spring-core

1.1.1、maven依赖

  <dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  </dependencies>

1.1.2、导入的jar包

1.2、我想引入spring-beans的其它版本,但是不想引入spring-context自动导入的spring-beans版本,该怎样做?

1.3、我想引入spring-core的其它版本,但是不想引入spring-context或者spring-beans自动导入的spring-core版本,该怎样做?

2、解决jar包冲突的方法

2.1、第一声明优先

2.1.1、maven依赖和导入的jar包

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

总结:spring-beans写在spring-context前面,那么spring-beans所依赖的jar包优先于spring-context所依赖的jar包,所以,spring-core是4.3.26.RELEASE版本

2.1.2、maven依赖和导入的jar包

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

总结:spring-context写在spring-beans前面,则优先使用spring-context依赖的spring-core的版本,所以这里spring-core的版本是5.0.2.RELEASE

2.2、路径近者优先

2.2.1、maven依赖和导入的jar包

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

总结:虽然spring-context依赖spring-beans,且spring-context写在spring-beans 4.3.26.RELEASE前面,但是spring-beans 4.3.26.RELEASE的路径优先于spring-context所依赖的spring-beans,所以这里spring-beans的版本是4.3.26.RELEASE。根据第一声明优先规则,这里spring-core的版本是5.0.2.RELEASE

2.3、直接排除法

2.3.1、maven和导入的jar包

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.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.3.26.RELEASE</version>
        </dependency>
    </dependencies>

总结:spring-context在spring-beans 4.3.26.RELEASE前面,原则上会优先导入spring-context依赖的spring-core版本,但是这里使用exclusions排除了spring-context中的spring-core,所以这里导入的还是spring-beans 4.3.26.RELEASE中依赖的spring-core版本

原文地址:https://www.cnblogs.com/liuyang-520/p/12394022.html