作为一个java程序员,经常会遇到jar包冲突的问题,那么遇到了这样的情况应该怎样解决呢?下面一起来看看相关解决示例吧!
jar包冲突解决方法:
在遇到了jar包冲突的时候,首先我们一定要明确究竟是哪一个jar包冲突了。
这个还是非常的简单的,看我们调用的类或者是方法,是属于哪个Jar包即可。
之后,就是要将这个冲突找出!
这里的话使用命令:
mvn dependency: tree - Dverbose - Dincludes = <groupId>:<artifactId>
填上Jar包的groupId和artifactId。
可以只有一个,但是注意,不要少了中间的冒号,这样就会输出依赖树,而且,是仅仅包含这个Jar包的依赖树,这样的话,哪些地方依赖了这个Jar包的哪个版本就会非常的清晰了。
例:项目中notify-common包存在冲突,我们使用命令
mvn dependency: tree - Dverbose - Dincludes =: notify - common
得到依赖树输出
[INFO] com.taobao.wlb: bis - server: war: 1.0 - SNAPSHOT[INFO] + -com.taobao.wlb: bis - core: jar: 1.0 - SNAPSHOT: compile[INFO] | \-com.taobao.logistics: schedule - client: jar: 1.1 .1: compile[INFO] | \-(com.taobao.notify: notify - common: jar: 1.8 .15: compile - omitted for conflict with 1.8 .19 .26)[INFO]\ - com.taobao.notify: notify - tr - client: jar: 1.8 .19 .26: compile[INFO] + -com.taobao.notify: notify - common: jar: 1.8 .19 .26: compile[INFO]\ - com.taobao.notify: notify - remoting: jar: 1.8 .19 .26: compile[INFO]\ - (com.taobao.notify: notify - common: jar: 1.8 .19 .26: compile - omitted for duplicate)
再来看看依赖树当中,所有的叶子节点就是所有的notify-common包。
可以看到依赖的bis-core中依赖了schedule-client包,它依赖了一个notify-common包,版本是1.8.15,第四行的后面也提示了这个包同其他包有冲突。
系统依赖的notify-tr-client包所依赖的版本是1.8.19.26,所以就知道是这里冲突了,在POM排除掉依赖,就可以了。
下面对执行的命令做一个简单的说明:
mvn dependency: tree - Dverbose - Dincludes = <groupId>:<artifactId>
mvn dependency: tree
maven依赖的分析命令。
作用:对项目的依赖进行分析,并输出项目依赖树。
-Dverbose
作用:添加了verbose一个环境变量,起的作用是在分析项目依赖时输出明细,这样项目中依赖的所有引用都会被输出出来,包含了所有的间接引用,会有很多很多,我们只需要我们要找的,所以就需要第三个参数了;
-Dincludes = <groupId>:<artifactId>
作用:进行过滤,只包含我们想要的依赖的依赖时,排除掉其它不需要的,依赖树的所有叶子节点就是我们的找的依赖包,其中的groupId和artifactId可以只填写一个,为了保证准确性,一般都会填两个;
其他方法:
1、mvn dependency:tree -Dverbose > tree.log
直接输出冲突的jar文件
2、使用idea,在pom.xml中右单击 选择Diagrams-》show dependencies
3、maven工程-用eclipse来解决,点开pom.xml,切换到hierarchy dependency,右上角搜索对应的包,可以清晰地看到冲突版本
更多java基础知识,请继续关注奇Q工具网来进行了解吧!
以上内容源于网络,仅供参考,希望可以对你有所帮助。
推荐阅读: