2017-04-18 220 views
0

我有这种情况与我的Maven依赖:Maven依赖与不同版本的同一子依赖性

  • X1需要D2.2。
  • Y1需要Z1需要D2.1。

如果我强制每个人使用D2.2,那么Z1在运行时会失败,因为它需要D2.1中的一个类的一个版本(D2.2中不再有)。如果我强制每个人使用D2.1,那么X1会失败,因为它需要一个更新版本的类,现在在D2.2中。将Z1升级到最新版本不起作用,因为它仍然使用D2.1。 X1和Y1也是如此。

我该如何做这项工作?

感谢, 阿尔瓦罗

+0

声音像X1或Z1中的一个或两个都被破坏了,应该修复 - 尽管根据semver,一个类不应该在2.1和2.2版本之间掉线。在这种情况下,您可能必须指定依赖关系才能获得有用的答案。 – chrylis

+0

2.2中没有放弃类。构造函数(已被弃用)已从公共转换为默认修饰符。所以现在它不再可以通过Z1访问。啊。 –

+0

类,方法,构造函数,不管。公共API不应该被删除。 – chrylis

回答

1

你刚才遇到的diamond dependency problem。这是一个真正的痛苦,它出现在任何有订单关系的地方。依赖类似于顺序,继承也是这样,这是在Java中不允许使用multiple inheritance的原因。它甚至出现在推断中,所谓的Nixon Diamond作为钻石依赖模拟。为了解决这个问题,如果你有权访问Z1,或者它是开源的,修改/分叉/修改它以使用D2.2,然后修改/分叉/修补Y1以使用修补后的Z1。

如果您拥有自己的专用/镜像工件存储库,我建议您进行修补。创建一个构建作业,克隆开源版本,进行文件修改,构建并发布到您的工件回购。或者,或者另外,使开放源码发生变化。

祝你好运。