对我来说很简单: 我使用了两个非常流行但相互矛盾的scala库:Spark SQL& JSON4s。每个都取决于Jackson XML解析器的不同版本。
由于除了我自己的程序之外没有人使用JSON4,因此一个简单的解决方案是将包org.json4s.jackson
和com.fasterxml.jackson
迁移到新位置。
然而,maven-shade插件只能在打包过程中执行此操作,因为所有测试和IDE运行都在此之前发生。无论是在IDE中的mvn-test还是scala测试中运行,这仍然会导致所有测试失败。
是否有一个插件可以集中管理所有三种情况的包重定位策略:JAR-packaging / mvn-test / IDE-run?我整天都在网上搜索,找不到答案。
答案 0 :(得分:4)
我们通过重新编译(和修补)来协调库来解决了这个问题。任何与阴影相关的东西都会支持一个版本而不是另一个版本,这意味着您可能在一个库中修复的内容可能会在另一个库中破坏。
对于那些来自OSGi阵营的评论,是的,这是OSGi想要解决的问题,但它在Spark环境中的表现并不好:)
您是否考虑降级两个版本中的一个来调整资源?通常其中一个库设法首先释放,而第二个库只是稍微落后......有时候答案可以在运行一个与#34;最后发布"一致的旧版本中找到答案。项目