解决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
- 比较git commit 两个版本之间次数
- eclipse: workspace出错导致无法启用的解决
- 【node错误】/usr/bin/env: node: No such file or directory
- Django比较相等或者不相等的模板语法ifequal / ifnotequal
- 使用testNGListenter来自定义日志
- 通过代码去执行testNG用例
- $.cookie is not a function;原因及解决办法
- 为何学习以及如何理解SSH框架?内含Hibernate学习指南
- 生成唯一标识 字符串跟时间戳的结合
- git命令中带有特殊符号如@
- centos下安装jenkins
- Django实现任意文件上传(最简单的方法)
- 微信小程序HCE能力全面开放,手机秒变公交卡
- spring-自动加载配置文件使用属性文件注入
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- mapstruct解放Java对象转换
- protobuf在嵌入式linux下的移植及c语言调用
- 文本挖掘| 什么时候可以用到主题建模?
- Spark 基础面试题
- Hbase 基础面试题
- 跟我学万字长文:最前沿的特征可视化(CAM)技术
- ES 面试题
- Flink 面试题
- 【入坑JAVA安全】序列化与反序列化
- Redis 常见面试题
- 老公,JNDI注入是什么呀?
- XXE漏洞:DocumentBuilder使用之殇
- IDEA怎么远程调试应用?
- Tidyverse| XX_join :多个数据表(文件)之间的各种连接
- tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)