maven隐式依赖引起的包冲突

包冲突

  1. 使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题。
  2. 这种冲突可能是显式依赖导致,也可能是隐式依赖导致。
    • 显式依赖,直接可以从pom.xml文件的<dependency>中看到两个冲突包的引用。
    • 隐式依赖,在pom.xml的<dependency>无法看到冲突的包,而是由<dependency>引入的包间接引入的。

解决

  1. 先确认哪些依赖间接引入了包。使用mvn dependency:tree查看整个项目的依赖树,这里能看到所有的依赖,包括间接依赖。
    结果类似如下:
[INFO] +- junit:junit:jar:4.12:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.apache.storm:storm-core:jar:1.0.2:provided
[INFO] |  +- com.esotericsoftware:kryo:jar:3.0.3:compile
[INFO] |  |  \- com.esotericsoftware:minlog:jar:1.3.0:compile
[INFO] |  +- org.clojure:clojure:jar:1.7.0:provided
[INFO] |  +- com.lmax:disruptor:jar:3.3.2:provided
[INFO] |  +- org.apache.logging.log4j:log4j-api:jar:2.1:provided
[INFO] |  +- org.apache.logging.log4j:log4j-core:jar:2.1:provided
[INFO] |  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.1:provided
[INFO] |  +- org.slf4j:log4j-over-slf4j:jar:1.6.6:provided
[INFO] |  +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] +- com.aaa.khala:aaa-khala-insight-sdk-transfer-api:jar:1.0.0-SNAPSHOT:compile
[INFO] |  \- com.aaa.khala:aaa-khala-common:jar:1.0.0-SNAPSHOT:compile
[INFO] |     +- javax.mail:javax.mail-api:jar:1.5.5:compile
[INFO] |     +- cglib:cglib:jar:2.2.2:compile
[INFO] |     +- org.aspectj:aspectjrt:jar:1.7.4:compile
[INFO] |     +- org.aspectj:aspectjweaver:jar:1.7.4:runtime
[INFO] |     +- org.javassist:javassist:jar:3.20.0-GA:compile
[INFO] |     +- log4j:log4j:jar:1.2.17:compile
[INFO] |     +- org.slf4j:slf4j-log4j12:jar:1.7.7:compile
[INFO] |     +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |     +- jaxen:jaxen:jar:1.1.6:compile
[INFO] |     +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] |     +- commons-codec:commons-codec:jar:1.9:compile
[INFO] |     +- commons-beanutils:commons-beanutils:jar:1.9.2:compile
[INFO] |     +- org.apache.commons:commons-compress:jar:1.6:compile
[INFO] |     |  \- org.tukaani:xz:jar:1.4:compile
  1. 查到冲突包对应的依赖,在pom.xml的<dependency>中配置排除,就不会引入该包了,例如:
<dependency>
    <groupId>com.aaa.khala</groupId>
    <artifactId>aaa-khala-insight-sdk-transfer-api</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <exclusions>  
        <exclusion>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-log4j12</artifactId>  
        </exclusion>  
    </exclusions>
</dependency>   

========广告时间========

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。

为什么写《Tomcat内核设计剖析》

=========================

欢迎关注:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超人汪小建(seaboat)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值