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>   

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

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

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

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

欢迎关注:

时间: 2024-09-19 09:20:54

maven隐式依赖引起的包冲突的相关文章

maven导出项目依赖的jar包

一.导出到默认目录 targed/dependency      从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: mvn dependency:copy-dependencies        或在eclipse中,选择项目的pom.xml文件,点击右键菜单中的Run As,见下图红框中,在弹出的Configuration窗口中,输入 dependency:copy-dependencies后,点击运行       maven项目所依赖的jar包会

【转】maven导出项目依赖的jar包

本文转自:http://my.oschina.net/cloudcoder/blog/212648 一.导出到默认目录 targed/dependency      从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: mvn dependency:copy-dependencies        或在eclipse中,选择项目的pom.xml文件,点击右键菜单中的Run As,见下图红框中,在弹出的Configuration窗口中,输入 depende

maven2-maven pom.xml 依赖的jar包没有版号如何处理

问题描述 maven pom.xml 依赖的jar包没有版号如何处理 cmbJava15cmbJava15 ** **systemD:/jenkins/jobs/test maven new1/workspace/_sharelib/cmbJava15.jar 解决方案 解决方案二: version里没版号怎么处理

使用maven解决两个开源框架的包冲突,必须下载它的源代码版本来自己编译吗?

问题描述 使用maven解决两个开源框架的包冲突,必须下载它的源代码版本来自己编译吗? 最近下载了两个相互配合的开源框架,都是编译好的二进制版本,但运行时报错提示jar包冲突. 自然想到了使用maven来解决包依赖.包冲突等问题. 但我对maven的理解是:它根据pom.xml文件来依次完成下载.编译.测试.打包等工作. 那我的问题就是,若要使用maven来管理包,是不是不能下载二进制版本的程序,只能下载源代码版本的来自己编译?因为如果下载编译好的二进制版本,每个框架其中的lib文件夹下已经有很

maven项目-maven tomcat 6 servlet-api.jar和jsp-api.jar这两个包冲突

问题描述 maven tomcat 6 servlet-api.jar和jsp-api.jar这两个包冲突 解决方法1:<scope>provided</scope> 解决方法2 : 删除jar包 在网上找了好到方法,都不行 注意:我在本地可以,但是放到服务器上就不行了 本地是win7系统,服务器上是windows_server_2008_R2 请大神们帮我解决一下,谢谢! 解决方案 eclipse note:关于工程包丢到tomcat及jsp-api.jar//servlet-a

maven项目本地仓库有jar包,但是pom.xml却提示依赖关系报错!这是怎么处理

问题描述 maven项目本地仓库有jar包,但是pom.xml却提示依赖关系报错!这是怎么处理 解决方案 贴出具体描述来,这样看不出来

maven: 打包可运行的jar包(java application)及依赖项处理

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: 1 <plugin> 2 <groupId>org.codehaus.mojo</groupId> 3 <artifactId>exec-maven-plugin</artifactId> 4 <version>1.2.1</version> 5 <executions> 6 <execu

Maven使用笔记(二)Eclipse中maven项目添加依赖

1.在Eclipse中创建Eclipse项目后如何添加jar包? 点击pom.xml文件.我们可以看到下面有7个标签. 各个标签的含义如下: Overview:显示maven项目的一些基本信息Dependencies:添加jar包的页面Plugins:添加maven插件的页面.比如tomcat-maven-plugin等Dependency Hierarchy:用于显示jar包的依赖关系.没事的时候可以看看jar包的依赖关系Effective POM:显示maven的编译路径,plugin之类的

Maven 能够解决所有的 jar包管理吗?

问题描述 (1)之前eclipse导入别人的工程后,就发现各种红叉报错误,而且大都jar包是版本的问题,每一次工程导入都得手动更改几乎所有的jar包版本:(2)更要命的是,多个人开发一个比较大的工程,不同的人的搭建环境可能不一样,jar引入的路径不一样可能还好说,要是版本不一样,就要命了,自己要么网上一个一个的对应下载,要么厚着脸皮向人家要.(3)当时就想能不能建立自己的一个jarHome库,巧的最近听说有一个Maven的工具,非常友好的解决了jar包版本不同引起的各种问题.(4)我的问题是,M