Maven 父 POM 与 BOM 依赖管理

Gar*_*son 8 dependency-management pom.xml maven maven-bom

假设我有一个在依赖管理中root定义的Maven 父 POM foo:bar:1.0.0。我有另一个parent用作root父级的父 POM(只是为了向示例添加另一个层)。最后,我有一个物料清单bom,它用作root其父级,但foo:bar:2.0.0在其依赖性管理中重新定义。

在我的项目中app,我继承parent并在依赖管理部分导入 BOMapp

root (foo:bar:1.0.0) <- parent <- app+bom
 ^
 |
bom (foo:bar:2.0.0)
Run Code Online (Sandbox Code Playgroud)

哪个依赖管理部分获胜?我可以获得哪个版本foo:bar

我知道如果我直接包含foo:bar在 的依赖管理部分中app,它将覆盖从父级继承的依赖管理部分。但是,在依赖管理部分导入BOM 是否等同于直接将其包含在依赖管理部分中,并且足以覆盖父级的 BOM?或者foo:bar从父级继承的依赖管理优先?

小智 12

根据maven优先规则,根版本将获胜,因此你将得到foo:bar:1.0.0,如果你查看有效的POM,你将能够看到它。我认为这会降低 BOM 项目的效率,因为您无法使用它来覆盖父级的版本,并且必须在应用程序或父级中声明版本。

优先顺序

因此,决定版本的方法有多种,这意味着存在优先顺序。

  • POM 中直接声明中提供的版本具有最高优先级。
  • 父 pom 中提供的版本具有第二优先级。
  • 导入 pom 的版本获得第三名
  • 最后,无论我们从依赖调解中得到什么

  • 我希望有一个权威的参考,但由于很多人报告这确实是如何工作的,所以我将继续并将其标记为正确答案。 (2认同)