Maven最佳实践:显式子依赖与可传递
我有一个parent-pom.xml,它声明了一个依赖关系a v1.0,该依赖关系在Maven最佳实践:显式子依赖与可传递,maven,maven-3,Maven,Maven 3,我有一个parent-pom.xml,它声明了一个依赖关系a v1.0,该依赖关系在部分中可传递地依赖于B v1.0 My child-pom.xml在部分引用了v1.0。但是,子项目的代码也使用依赖关系B v1.0中的类 子项目的代码在编译和运行时没有显式引用bv1.0,因为Maven通过v1.0可传递地解析它。在一节中没有明确引用B v1.0有什么缺点?好吧,假设您想将A升级到v1.1,并且该版本不再使用B,或者使用具有不同API的B v2.0。这样做会破坏代码,因为它依赖于不再存在的东西(
部分中可传递地依赖于B v1.0
My child-pom.xml在
部分引用了v1.0。但是,子项目的代码也使用依赖关系B v1.0中的类
子项目的代码在编译和运行时没有显式引用bv1.0,因为Maven通过v1.0可传递地解析它。在
一节中没有明确引用B v1.0有什么缺点?好吧,假设您想将A升级到v1.1,并且该版本不再使用B,或者使用具有不同API的B v2.0。这样做会破坏代码,因为它依赖于不再存在的东西(B v1.0)
另一方面,如果您明确指定在子项目中使用B,那么您将得到以下两个选项之一:
- 一切都很好,因为您仍然依赖于bv1.0,并且您使用的A的代码路径中没有一个实际使用了与B不兼容的东西
- 您对A的依赖关系被破坏了,但是通过查看依赖关系树并确定B的版本已被破坏,可以很容易地发现这一点。然后,您可以选择降级回A依赖项,升级代码以使用新的B(如果需要),甚至可以使用OSGi来减少对同一软件包的不兼容版本的使用