美文网首页
Jar包冲突解决方法

Jar包冲突解决方法

作者: jeffrey_hjf | 来源:发表于2018-11-08 11:28 被阅读0次

前言


对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类、方法等,或者有时遇到一些日志系统的问题,我们会遇到ClassNotFoundException,NoSuchFieldException,NoSuchMethodException 之类的运行时异常,从经验上我们就会判断,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,第四行的后面也提示了这个包同其他包有冲突 - omitted for conflict with 1.8.19.26)。而我们的系统依赖的notify-tr-client包所依赖的版本是1.8.19.26,于是我们知道是这里冲突了,在POM排除掉依赖,OK了。

说明


这里我们对我们执行的命令做一个简单的说明。 mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId> 第一部分mvn dependency:tree是maven依赖的分析命令,作用是对我们的项目的依赖进行分析,并输出项目依赖树 第二部分-Dverbose的作用是添加了verbose一个环境变量,起的作用是在分析项目依赖时输出明细,这样项目中依赖的所有引用都会被输出出来,包含了所有的间接引用,会有很多很多,我们只需要我们要找的,所以就需要第三个参数了

第三部分-Dincludes=<groupId>:<artifactId>的作用就是进行过滤,只包含我们想要的依赖的依赖时,排除掉其它不需要的,依赖树的所有叶子节点就是我们的找的依赖包。其中的groupId和artifactId可以只填写一个,为了保证准确性,一般都会填两个(填写时不包括尖括号)。

其他方法:


1、对于maven工程,我的办法是使用eclipse来解决,点开pom.xml,切换到hierarchy dependency,右上角搜索对应的包,可以清晰地看到冲突版本

2、可以使用idea,在pom.xml中右单击 选择Diagrams-》show dependencies

3、mvn dependency:tree -Dverbose > tree.log 直接输出冲突的jar文件

相关文章

  • [Elasticsearch] ES的依赖包和Hadoop的底层

    问题原因 程序中同时引用了Hadoop与Elasticsearch的jar包,导致包冲突。 解决方法 使用mave...

  • Es的jar以及环境安装以及错误

    1:jar包冲突 jar包冲突:jruby-complete 与 joda-time jar 包冲突。两者中都有o...

  • Jar包冲突解决方法

    前言 对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类、方法等,或者有时遇到一些日志...

  • Maven解决依赖冲突

    maven依赖冲突以及解决方法 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类...

  • 解决Unity导入aar或jar出现的Program type

    原因:当Unity导入的aar或jar包名和项目包名一样的话,BuildConfig会出现冲突。解决方法:在aar...

  • 大数据小问题

    1 Hadoop Mapreduce 提交YARN jar包冲突问题 最近开发遇到一个jar包冲突的问题, 我们的...

  • Maven中依赖冲突解决方案

    在使用Maven中我们导入jar包坐标时会产生依赖传递,而依赖传递难免会发生jar包间的依赖冲突,解决jar包冲突...

  • jar包冲突

    当使用maven导入依赖时,可能会出现不同的依赖包含了同一个jar,在编译期间不会报错。可一旦run app的时候...

  • java.lang.NoSuchMethodError: org

    . jar包版本冲突,需要检查pom文件,删除冲突版本

  • maven引入jar包时出错

    引入以上jar包后,其他的文件一直报错,原因是引入的这个jar包和框架里原来的jar包冲突

网友评论

      本文标题:Jar包冲突解决方法

      本文链接:https://www.haomeiwen.com/subject/afoixqtx.html