maven隐式依赖引起的包冲突

简介: 包冲突使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题。

包冲突

  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>   

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

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

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

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

欢迎关注:

这里写图片描述

目录
相关文章
|
29天前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
30天前
|
安全 Java Maven
优化Maven镜像配置:使用阿里云加速依赖下载
更新Maven镜像配置至关重要,尤其使用阿里云仓库时。在`settings.xml`中加入特定镜像配置可显著提升依赖下载速度。示例配置指定了阿里云镜像ID、替代表态仓库、安全的URL、默认布局及启用版本管理。需定位至用户目录下的`.m2/`文件夹编辑`settings.xml`,添加镜像信息后保存测试。若下载仍慢,考虑网络状况或备选镜像。多镜像设置时需注意避免冲突。
135 3
|
1月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
91 1
|
1月前
|
Java Maven
intellij idea如何查看项目maven依赖关系图
这篇文章介绍了如何在IntelliJ IDEA中查看项目的Maven依赖关系图,包括使用Maven工具栏和相关操作来展示和查看依赖细节。
|
2月前
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
1009 7
|
1月前
|
Java Maven 开发者
"揭秘IDEA的神奇助手:Maven Helper插件,让你轻松驾驭复杂依赖,告别冲突噩梦!"
【8月更文挑战第20天】Maven Helper是一款提升Java开发者工作效率的IDEA插件,它能直观展示项目依赖关系并协助管理。主要功能包括依赖树视图、冲突检测与解决及依赖排除。安装简便,重启IDEA后即用。借助其“Dependencies”面板,开发者可以清晰了解依赖详情,快速定位并解决冲突问题,有效优化项目结构,提升开发效率。
50 0
|
1月前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
1月前
|
Java Maven Windows
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
41 0
|
2月前
|
Java Maven
Maven 引入外部依赖
在Maven项目中引入外部库如ldapjdk.jar,需创建`src/lib`并放jar,接着在`pom.xml`的`&lt;dependencies&gt;`添加系统依赖
|
2月前
|
Java Maven
Maven 引入外部依赖
在 Maven 项目中引入 LDAP 帮助库 ldapjdk.jar,需将 jar 放入 `src/lib`,然后在 `pom.xml` 的 `&lt;dependencies&gt;` 部分添加系统依赖,