4

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

在我的项目app中,我继承自parent,然后将 BOM 导入到的依赖项管理部分app

root (foo:bar:1.0.0) <- parent <- app+bom
 ^
 |
bom (foo:bar:2.0.0)

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

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

4

1 回答 1

4

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

优先权

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

  • POM 中直接声明中提供的版本具有最高优先级。
  • 父 pom 中提供的版本优先。
  • 来自进口 pom 的版本排在第三位
  • 最后,无论我们从依赖中介中得到什么
于 2019-09-03T11:11:41.663 回答