JAR HELL在IDE(intelliJ),mvn-test和mvn-package中:如何在所有设置中统一依赖重定位?

时间:2015-09-05 22:05:13

标签: java maven jar dependency-management maven-shade-plugin

对我来说很简单: 我使用了两个非常流行但相互矛盾的scala库:Spark SQL& JSON4s。每个都取决于Jackson XML解析器的不同版本。

由于除了我自己的程序之外没有人使用JSON4,因此一个简单的解决方案是将包org.json4s.jacksoncom.fasterxml.jackson迁移到新位置。

然而,maven-shade插件只能在打包过程中执行此操作,因为所有测试和IDE运行都在此之前发生。无论是在IDE中的mvn-test还是scala测试中运行,这仍然会导致所有测试失败。

是否有一个插件可以集中管理所有三种情况的包重定位策略:JAR-packaging / mvn-test / IDE-run?我整天都在网上搜索,找不到答案。

1 个答案:

答案 0 :(得分:4)

我们通过重新编译(和修补)来协调库来解决了这个问题。任何与阴影相关的东西都会支持一个版本而不是另一个版本,这意味着您可能在一个库中修复的内容可能会在另一个库中破坏。

对于那些来自OSGi阵营的评论,是的,这是OSGi想要解决的问题,但它在Spark环境中的表现并不好:)

您是否考虑降级两个版本中的一个来调整资源?通常其中一个库设法首先释放,而第二个库只是稍微落后......有时候答案可以在运行一个与#34;最后发布"一致的旧版本中找到答案。项目