【问题标题】:Maven parent POM vs BOM dependency managementMaven 父 POM vs BOM 依赖管理
【发布时间】:2019-10-16 08:35:49
【问题描述】:

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

在我的项目app中我继承自parent,然后我在app的依赖管理部分中import the BOM

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

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

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

【问题讨论】:

  • 最接近我认为的项目。
  • 导入一个 bom 与将它们直接放入 dependencyManagement 相同,但更弱。我从来没有找到指定优先级的文档,我只是通过例子有一个模糊的理解。
  • 如果您不确定哪些版本中的哪些依赖项被拉入您的项目,您可以尝试mvn dependency:treemvn help:effective-pom

标签: maven pom.xml dependency-management maven-bom


【解决方案1】:

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

优先级

因此,有多种方法可以确定版本, 这意味着有一个优先顺序。

  • 在 POM 中直接声明中提供的版本具有最高优先级。
  • 父 pom 中提供的版本优先。
  • 进口 pom 的版本位居第三
  • 最后,无论我们从依赖中介中得到什么

【讨论】:

  • “根据maven的优先规则……”能否提供权威参考?
  • 我发现了这个:baeldung.com/spring-maven-bom 也是 maven 网站上关于导入 BOM 的部分maven.apache.org/guides/introduction/…,但仅暗示了优先级。
  • 嗯,在实践中看起来是真的,只是遇到了一个奇怪的案例并去确认。这就是它的行为方式 - 在我的情况下,导入的 pom 是在父 pom 之后,并且有人更改了父 pom...
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多