Maven最佳实践:明确的子依赖与传递

时间:2015-01-12 17:25:51

标签: maven maven-3

我有一个parent-pom.xml,它声明了一个依赖关系A v1.0,它依赖于<dependencyManagement>部分中的B v1.0。

我的child-pom.xml引用了<dependencies>部分中的v1.0。但是,子项目的代码也使用依赖关系B v1.0中的类。

子项目的代码在没有显式引用B v1.0的情况下编译和运行,因为Maven通过A v1.0传递解析它。在<dependencies>部分没有明确引用B v1.0的缺点是什么?

1 个答案:

答案 0 :(得分:1)

好吧,假设您要将A升级到v1.1并且此版本不再使用B,或使用具有不同API的B v2.0。这样做会破坏您的代码,因为它依赖于不再存在的东西(B v1.0)。

另一方面,如果您明确指定您在子项目中使用B,那么您最终会选择以下两个选项之一:

  • 一切正常,因为您仍然依赖于B v1.0,并且您使用的A代码路径中没有一个实际上使用的是B不兼容的东西。
  • 您对A的依赖性已被破坏,但通过查看依赖关系树并确定B的版本已被碰撞,可以轻松发现这种情况。然后,您可以选择降级A依赖项,升级代码以使用新B(如果需要),甚至可以使用OSGi来减少使用同一软件包的不兼容版本。