jar包冲突怎么解决?完整例子分享

KLQ 2020-07-02 15:39:08 java常见问答 6123

作为一个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,第四行的后面也提示了这个包同其他包有冲突jar包冲突怎么解决

系统依赖的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工具网来进行了解吧!

以上内容源于网络,仅供参考,希望可以对你有所帮助。

推荐阅读:

jar包反编译,java反编译jar包介绍

jar包和war包的区别,java jar包和war包部署的区别介绍

java jar包怎么打开?jar包怎么运行?