在我的项目中,有2个库,每个库都依赖于XML解析类java.xml.parsers.DocumentBuilderFactory。这些库中的每一个引用来自不同jar的文件(一个从一个名为xmlParserAPIs的jar中获取,而另一个从xml-apis-1.0.b2.jar中获取它)。不幸的是,每个文件中都有不同版本的类,所以我看到运行时错误,具体取决于它们的加载顺序。这两个xml jar都是第三方库的传递依赖。有没有办法处理这场冲突?
编辑:我不确定它是否会对如何处理问题产生影响,但这只会在测试中发生,因为其中一个依赖项位于测试范围内。
感谢, 杰夫
答案 0 :(得分:3)
(...)不幸的是,每个文件中都有不同版本的类,所以我看到了运行时错误,具体取决于它们的加载顺序。
理论上,xml-apis.jar
和xmlParserAPIs.jar
(来自xerces2-j)是相同的JAR ,但名称不同,xmlParserAPIs.jar
已弃用多年(请参阅this message和this one)。
如果您的依赖项依赖于xml-apis.jar
的不同且不兼容的版本,我会说这些依赖项是互斥的,换句话说是不兼容的,至少对于您正在使用的版本而言。唯一的解决方案是找到具有融合依赖性的版本。
如果他们可以使用兼容版本,请使用xmlParserAPIs.jar
的依赖关系exclusion仅使用xml-api.jar
。
我不确定它是否会对如何处理问题产生影响,但这只会在测试中发生,因为其中一个依赖项在测试范围内。
不,这只是解释了为什么你没有在运行时遇到问题(因为test
作用域不在类路径上,显然不会发生冲突。)