maven依赖冲突
Posted
技术标签:
【中文标题】maven依赖冲突【英文标题】:maven dependency *** 【发布时间】:2011-03-12 12:55:09 【问题描述】:在我的项目中,有2个库,每个库都依赖于XML解析类java.xml.parsers.DocumentBuilderFactory。这些库中的每一个都从不同的 jar 中引用文件(一个从名为 xmlParserAPIs 的 jar 中获取它,而另一个从 xml-apis-1.0.b2.jar 中获取它)。不幸的是,每个文件中都有不同版本的类,所以我看到运行时错误,具体取决于它们的加载顺序。这两个 xml jar 都是 3rd 方库的传递依赖项。有没有好的方法来处理这种冲突?
编辑:我不确定它是否会对如何处理问题产生影响,但这只会发生在测试中,因为其中一个依赖项在测试范围内。
谢谢, 杰夫
【问题讨论】:
【参考方案1】:(...) 不幸的是,每个文件中都有不同版本的类,所以我看到运行时错误,具体取决于它们的加载顺序。
理论上,xml-apis.jar
和 xmlParserAPIs.jar
(来自 xerces2-j)是相同的 JAR,但名称不同,xmlParserAPIs.jar
已被弃用多年(请参阅 this message 和 @987654322 @)。
如果您的依赖项依赖于不同且不兼容的xml-apis.jar
版本,我会说这些依赖项是互斥的,换句话说,至少对于您正在使用的版本是不兼容的。唯一的解决方案是找到具有收敛依赖关系的版本。
如果他们可以使用兼容版本,请使用 exclusion 的依赖项,以便 xmlParserAPIs.jar
仅使用 xml-api.jar
。
我不确定它是否会对如何处理问题产生影响,但这只会发生在测试中,因为其中一个依赖项在测试范围内。
不,这只是解释了为什么您在运行时没有遇到问题(因为 test
作用域不在类路径上,而且显然不会冲突)。
【讨论】:
谢谢。看起来我与其他 2 个库中的 xml 库有冲突。如果我从 jars 中排除 xmlParserAPIs 和 xml-apis 并让 jre 提供它们,那么一切正常。这是不安全的事情吗?我应该为 java.xml.parsers 添加系统范围的依赖项吗?谢谢。 @Jeff 1. 使用mvn dependency:tree
分析您的依赖关系。 2. 如果它与 JRE 的解析器一起工作,那么只需排除依赖项。 3. 我倾向于避免system
范围依赖(在我看来,麻烦大于好处)。以上是关于maven依赖冲突的主要内容,如果未能解决你的问题,请参考以下文章
Maven01_05_compile和test依赖范围Maven的一些依赖情况依赖冲突如果出现冲突就会采取就近原则可选依赖(optional)排除依赖(exclusions)