解决jar包冲突的简单办法

时间:2022-07-25
本文章向大家介绍解决jar包冲突的简单办法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

解决jar包冲突的简单办法– 在使用log4j.properties时,pom中导入的一些jar会产生log4j类的冲突报错,以下是一个简单的pom配置:

解决jar包冲突的简单办法

场景:在使用log4j.properties时,pom中导入的一些jar会产生log4j类的冲突报错,以下是一个简单的pom配置:

复制<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-client</artifactId>
            <version>1.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.0</version>
        </dependency>

        <dependency>
            <groupId>com.nari</groupId>
            <artifactId>front-param</artifactId>
            <version>2.9</version>

        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

<!--        <dependency>-->
<!--            <groupId>com.alibaba.boot</groupId>-->
<!--            <artifactId>nacos-discovery-spring-boot-starter</artifactId>-->
<!--            <version>0.2.4</version>-->
<!--        </dependency>-->
    </dependencies>

运行项目会出现一下冲突:

这里提示org-slf4j 冲突; 使用mvn dependency:tree 查看依赖树:

复制mvn dependency:tree > tree.txt

tree.txt:(信息比较多,就截取一点。)

复制
[INFO] com.nari:bgservice-task:jar:1.2.1
[INFO] +- org.springframework.boot:spring-boot-starter-data-redis-reactive:jar:2.0.4.RELEASE:compile
[INFO] |  - org.springframework.boot:spring-boot-starter-data-redis:jar:2.0.4.RELEASE:compile
[INFO] |     +- org.springframework.data:spring-data-redis:jar:2.0.9.RELEASE:compile
[INFO] |     |  +- org.springframework.data:spring-data-keyvalue:jar:2.0.9.RELEASE:compile
[INFO] |     |  - org.springframework:spring-oxm:jar:5.0.8.RELEASE:compile
[INFO] |     - io.lettuce:lettuce-core:jar:5.0.4.RELEASE:compile
[INFO] |        - io.projectreactor:reactor-core:jar:3.1.8.RELEASE:compile
[INFO] |           - org.reactivestreams:reactive-streams:jar:1.0.2:compile
[INFO] +- org.springframework.boot:spring-boot-starter-quartz:jar:2.0.4.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.0.4.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.0.4.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.4.RELEASE:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.4.RELEASE:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] |  |  |  |  - ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile
[INFO] |  |  |  |  - org.apache.logging.log4j:log4j-api:jar:2.10.0:compile
[INFO] |  |  |  - org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] |  |  +- org.springframework:spring-core:jar:5.0.8.RELEASE:compile
[INFO] |  |  |  - org.springframework:spring-jcl:jar:5.0.8.RELEASE:compile
[INFO] |  |  - org.yaml:snakeyaml:jar:1.19:runtime
[INFO] |  +- org.springframework:spring-context-support:jar:5.0.8.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-beans:jar:5.0.8.RELEASE:compile
[INFO] |  |  - org.springframework:spring-context:jar:5.0.8.RELEASE:compile
[INFO] |  |     - org.springframework:spring-expression:jar:5.0.8.RELEASE:compile
[INFO] |  +- org.springframework:spring-tx:jar:5.0.8.RELEASE:compile
[INFO] |  - org.quartz-scheduler:quartz:jar:2.3.0:compile
[INFO] |     - com.mchange:mchange-commons-java:jar:0.2.11:compile
[INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:2.0.4.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:2.0.4.RELEASE:compile
[INFO] |  |  +- org.springframework:spring-aop:jar:5.0.8.RELEASE:compile
[INFO] |  |  - org.aspectj:aspectjweaver:jar:1.8.13:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.0.4.RELEASE:compile
[INFO] |  |  +- com.zaxxer:HikariCP:jar:2.7.9:compile
[INFO] |  |  - org.springframework:spring-jdbc:jar:5.0.8.RELEASE:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:5.2.17.Final:compile
[INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
[INFO] |  |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.2.Final:compile
[INFO] |  |  +- org.javassist:javassist:jar:3.22.0-GA:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  +- org.jboss:jandex:jar:2.0.3.Final:compile
[INFO] |  |  +- com.fasterxml:classmate:jar:1.3.4:compile
[INFO] |  |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  - org.hibernate.common:hibernate-commons-
.....

看到这里发现不是方便查找需要的jar包,这里可以使用mvn dependency:tree -Dincludes 限制;

复制mvn dependency:tree -Dincludes=org.slf4j

从图中发现org-slf4j的版本是一样的,先不管这个,先排除所有试试;

复制<dependency>
           <groupId>org.apache.zookeeper</groupId>
           <artifactId>zookeeper</artifactId>
           <version>3.5.6</version>
           <exclusions>
               <exclusion>
                   <groupId>org.slf4j</groupId>
                   <artifactId>slf4j-log4j12</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>log4j</groupId>
                   <artifactId>log4j</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

再次运行 如果发现依然报错:

再次寻找冲突问题:

这次把焦点放在logback上;

执行

复制mvn dependency:tree -Dverbose -Dincludes=ch.qos.logback

发现这个logback 1.2.3的包,将其排除:

复制<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-quartz</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>ch.qos.logback</groupId>
                  <artifactId>logback-classic</artifactId>
              </exclusion>
          </exclusions>
      </dependency>

此次运行将正常运行不在报jar报冲突;;

处理jar冲突:

简介:处理jar包依赖冲突,首先,对于多个jar包都引用同一jar包的情况,最好是在程序中显式定义被共同引用的jar包的依赖,来统一版本号,方便维护 如果A和B都依赖同一jar包C,可能会出现两种情况 1.A和B引用的C版本相同,这时按照pom定义顺序选择第一个即可,没有冲突问题,如果在项目的maven中显示定义了C依赖,那么用选择项目定义的依赖,反正version都一样,没有影响 2.A和B依赖的C版本不同,选择版本高的那个,这时会出现两种结果 (1) 高版本兼容低版本,所以不会出现问题 (2)高版本不兼容低版本,假如A依赖C2版本,B依赖C3版本,C3不兼容C2,maven选择了高版本C3,对A来说会出现问题 有3种解决方法   [1]提升A版本,找到依赖C3的A版本   [2]如果B版本也可依赖C2,在项目的maven中显示定义对C2的依赖,这样所有都使用C2版本   [3]如果B版本不支持C2版本,只能降低B版本,找到依赖C2的B版本   从功能性和可维护性考虑,高版本提供的功能更多,bug更少,优先考虑1   再考虑2   最后考虑3

  • 作者: MysticalYcc