【问题标题】:BOM override order (with overlapping BOMs)BOM 覆盖顺序(具有重叠 BOM)
【发布时间】:2021-09-15 12:55:11
【问题描述】:

我有一个父 POM 和一个普通的 Maven 项目。

两者都在其依赖项管理中定义 BOM。在某些情况下,这些 BOM 可能会重叠,例如都指定了 log4j 的版本。

从我的测试看来:

  • 对于父 POM 中的重叠 BOM,第一个获胜,即为工件提供版本。
  • 如果来自子级和父级的 BOM 重叠,则来自子级 BOM 的版本胜出。

很遗憾,我没有找到任何关于此的文档。

我是对的吗?我可以依赖这种行为吗?

【问题讨论】:

  • 我可以承认第一个。第二个可以通过最近的解决方案策略来解释(从未有过这种情况;仅在父项中定义了事物)。但我怀疑是以这种方式记录的......我会说你可以依赖它(对于 Maven 3.X)..
  • @khmarbaise 谢谢。我还想在父级中定义所有内容,但我们有这样的情况,在一个多模块项目中,一个工件将部署在 WebSphere 上,另一个工件将部署在 JBoss 上。它们具有不同的提供依赖项,在不同的 BOM 中管理。

标签: java maven parent-pom maven-bom


【解决方案1】:

日志框架传统上存在于您的实际代码“旁边”,因此有点不清楚如何处理这个问题。

我发现将 build 阶段依赖项与 deployment 阶段依赖项分开对我有用。

基本思想是你编写的代码只需要依赖于日志框架的API(slf4j曾经是一个自然的选择),然后你有几个部署Maven配置(一个对于 JBoss,一个用于 WebSphere,一个用于在您的 IDE 中运行等),您可以在其中添加与该部署相关的依赖项。

所以我的建议是相应地更改您的代码库,使其仅具有日志框架的 API 依赖项,然后为每个实际部署类型创建一个新的 Maven 项目。如果需要,您可能还需要烘焙特定于部署的配置文件。

【讨论】:

  • 抱歉,如果不清楚,log4j 只是一个例子。在实践中,我们有例如不同 BOM 中的 Joda Time 或公共集合之类的东西。
猜你喜欢
  • 2022-01-19
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 2017-01-28
  • 2011-04-21
  • 1970-01-01
相关资源
最近更新 更多