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

tri*_*oid 5 java jar dependency-management maven maven-shade-plugin

对我来说很简单:我正在使用2个非常流行但有冲突的scala库:Spark SQL和JSON4s.每个都取决于Jackson XML解析器的不同版本.

因为除了我自己的程序没有人使用JSON4s,一个简单的解决方案是迁移软件包org.json4s.jackson,并com.fasterxml.jackson到新的位置.

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

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

Edw*_*uck 4

我们通过重新编译(和修补)以对齐库来解决该问题。任何与阴影相关的内容都将倾向于一个版本而不是另一个版本,这意味着您可能在一个库中修复的内容可能会在另一个库中被破坏。

对于 OSGi 阵营的评论,是的,这就是 OSGi 想要解决的问题,但它在 Spark 环境中效果不佳:)

您是否考虑过降级两个版本之一以调整资源?通常,其中一个库会首先发布,而第二个库则落后一点......有时,可以通过运行与“最后发布”项目一致的一致但较旧的版本来找到答案。