首页 > 解决方案 > 如何正确使用 Maven BOM-s?

问题描述

我已经很长时间没有这样做了,所以我似乎忘记了正确的做法。我想创建 BOM 文件,我想在一个<dependencyManagement/>部分中定义一堆依赖项,然后不必将它们定义为我的项目中的依赖项。

有人可以澄清这是如何工作的吗?BOM 文件是否只是用于在 POM 文件中声明一组依赖项,然后可以使用无版本,类似于父项(除了您可以拥有任意数量的这些,只要您喜欢),还是您也可以让它为您声明依赖项?

例如,如果我的 BOM 有一个<dependencyManagement/>部分,我是否还需要定义<dependencies/>一个部分,如果我想让所有使用 BOM 的项目始终使用所有依赖项?在使用 BOM 的项目中,我在以下文件中定义了以下内容<dependencyManagement/>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>foo-bom</artifactId>
                <version>${project.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

我是否仍然需要通过在要导入它们的 POM 中的显式声明来手动导入无版本依赖项?<dependencies/>将它们定义为在 BOM 中(该部分之外)的正确方法是否也是正确的<dependencyManagement/>

标签: mavenmaven-3

解决方案


BOM 只是dependencyManagement。他们不能声明依赖关系。

它们有两个主要目的:

  • 您可以添加无版本的依赖项(版本将来自 BOM)。
  • 它们覆盖您拉取的传递依赖项的版本(这样即使您的依赖项拉取了一个古老的 log4j,您也可以确保您拥有最近的 log4j)。

如果你真的想添加一堆依赖,用这些依赖编写一个 POM 并将其添加为依赖。


推荐阅读