前言

对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些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文件

转载于:https://www.cnblogs.com/adolfmc/p/7267106.html

Jar包冲突解决方法相关推荐

  1. Jar包冲突解决方法 Unknown lifecycle phase mvn Eclipse中执行maven命令

    1.如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..." 进行如上操 ...

  2. Maven的传递性依赖及其jar包冲突解决

    一.Maven简介 Maven是一个跨平台的项目管理工具.作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理. 二.Maven的依赖管理 1. ...

  3. Android Studio androidx 包冲突解决方法

    Android Studio androidx 包冲突解决方法 参考文章: (1)Android Studio androidx 包冲突解决方法 (2)https://www.cnblogs.com/ ...

  4. Maven项目中,添加依赖项后仍然出现找不到该jar包的解决方法

    写maven项目的时候,明明已经在pom.xml文件中加入和对应文件的依赖,但是程序运行时仍然报错,说找不到对应的jar包.如下图所示. 出现这种错误的原因是,虽然加入和依赖,但是并没有允许idea使 ...

  5. 当Eclipse中maven识别不了本仓jar包是的解决方法

    当Eclipse中maven识别不了本仓jar包是的解决方法: 在本地仓找到对应的jar包,复制到java安装目录 打开Eclipse.ini这个文件,把该带代码加到后面 -javaagent:G:\ ...

  6. Failed to read candidate component class包冲突解决方法

    Failed to read candidate component class包冲突解决方法 参考文章: (1)Failed to read candidate component class包冲突 ...

  7. java -jar 找不到依赖包_java找不到jar包的解决方法

    java找不到jar包的解决方法 发布时间:2020-04-16 14:38:04 来源:亿速云 阅读:280 作者:小新 今天小编给大家分享的是java找不到jar包的解决方法,很多人都不太了解,今 ...

  8. Maven构建聚合工程以及jar包冲突解决使用总结

    一.聚合工程 如图所示: SpringCloud_CH3为聚合工程,eurekaclientarticleservice为被聚合工程. 聚合工程为一个maven工程:聚合类的pom.xml文件为: & ...

  9. jar包冲突解决思路

    工作中,难免会因为各种原因需要对项目jar包进行升级,一升级,就会碰到各种jar包冲突问题,这时候就需要我们能很快定位冲突的位置,以及如何快速调整依赖. 首先,我们通常说的jar包冲突到底是指什么? ...

最新文章

  1. 1034. 二哥的金链
  2. 使用webpack打包ES6代码
  3. sql数据导入错误代码: 0x80004005_PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR...
  4. call,apply学习笔记
  5. javascript焦点图
  6. grid.getSelectionModel的所有操作
  7. 安装scrapy报错
  8. HDU1753 大明A+B【大数】
  9. shell基础--字符串和变量的操作
  10. 五子棋游戏代码(完整版)
  11. c花体复制_【改名用】可复制的花体英文汇总
  12. texlive 2022安装与使用
  13. oss文件服务器是什么,对象存储oss是什么
  14. 根据市场需求和反馈调整产品定位,调整产品既定设计策略和营销策略
  15. 计算机英语四六级考试时间2015,2015年四级考试时间安排(官方版)
  16. CSDN删除上传资源操作
  17. 台式计算机屏幕亮度在哪调,电脑亮度怎么调?教您电脑亮度在哪里调
  18. 华为重回Android,被谷歌移除的华为Mate 20 Pro重回Android Q名单
  19. 用CSS做的简单弹窗
  20. OTA 升级中的跟文件系统切换

热门文章

  1. 里签名boot有什么用_为什么大家都用苹果企业签名呢?
  2. 将Capicom调用代码封装到ActiveX——解决javascript调Capicom读取数字证书信息时,IE弹出安全提示的问题...
  3. linux开启权限继承,linux的一个权限问题(权限继承)
  4. 2020-01-14 转载【dpdk】使用libpcap-PMD驱动收发包
  5. 简书留言收费可行性评估
  6. cocos2dx之Http网络编程(一)——网络请求的发送和接收
  7. SPA优缺点、解决单页面应用的SEO困难问题以及三种网页渲染方式
  8. sublime配置python-rpel_SublimeREPL配置Python3开发
  9. IDEA工作常用快捷键
  10. Android:沉浸式状态栏(二)集成