jar包冲突的解决方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jar包冲突的解决方法相关的知识,希望对你有一定的参考价值。
参考技术A 一般就是在报错里找,如下,是我的报错信息,如下所示,这里比较明显的是org.apache.logging.slf4j.Log4jLoggerFactory这个类,报错的意思是说,实际构建的是用的就是上面的那个类,用了之后就开始报错了。所以问题就很明确了,肯定是这个类不该用,肯定是不同的jar包中,出现了相同的类名导致的。
如果你使用idea开发的话,可以双击shift,输入用org.apache.logging.slf4j.Log4jLoggerFactory类,然后点击如图的小按钮,找到对应的jar包,就找到了它的group,name,version等信息。
假设你用的是gredle,你可以跑一下dependencies,就可以拿到它们之间的全部的依赖,如果你用的maven的话,同样的道理,只需要在idea中点击,maven就可以了,
可以把2.2中跑出来得到的数据,粘贴在nodepa++中,然后搜索2.1中,对应的group,或是name都可以,通过这一步,就可以定位到是哪个jar包引进冲突的包
gradle中的做法是如图:
Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结
前言
在实际开发中,多模块项目常会使用 Maven 进行包管理。在 poml 文件中进行包依赖时,常存在引入一个 jar 包中默认依赖了其他的 jar 包的情况。这样很容易导致 jar 包冲突,从而产生一些诡异问题,如版本问题导致的类、方法找不到等。下面我们将聊聊具体关于依赖冲突产生的原因、排查方式以及解决的方案。
- 依赖传递的概念:举个简单例子,比如一个多模块项目依赖关系如下图。其中 bepe-dal 引入了 common-lib,当 bepe-manager 模块中引入 bepe-dal 时,common-lib 这个依赖也会被引入到 bepe-manager 模块中,这个就是依赖传递。
- 依赖冲突的概念:依赖冲突指当模块中引入很多 jar 包时,如果其中存在着 groupId 和 artifactId 一样,但是 version 不一样的两个 jar 包,这就是依赖冲突。那么在应用时会选用哪一个 version 呢?这就是我们接下来要讨论的冲突解决方式。
依赖冲突该是怎么解决的?
- 最短路径原则
- 声明优先原则
- 依赖排除
最短路径原则
当存在 groupId 和 artifactId 一致但是 version 不一致的 jar 包冲突时,模块会自动选择距离自己路径短的包。如:bepe-manager 到 common-lib (1.0) 的距离为 2,bepe-manager 到common-lib (2.0) 的距离为 1,就会选择距离短的 common-lib(2.0),这就是最短路径原则。
以上是关于jar包冲突的解决方法的主要内容,如果未能解决你的问题,请参考以下文章