Maven 最佳实践:显式子依赖项与传递依赖项

  • 本文关键字:依赖 最佳 Maven maven maven-3
  • 更新时间 :
  • 英文 :


我有一个父pom.xml它声明了一个依赖项A v1.0,该依赖项<dependencyManagement>部分中传递依赖于B v1.0。

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

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

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

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

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

最新更新