如何正确使用 Maven BOM-s?

How to properly use 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 中的显式声明手动导入无版本依赖项?在 BOM 中(在 <dependencyManagement/> 部分之外)也将它们定义为 <dependencies/> 的正确方法是否正确?

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

它们有两个主要目的:

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

如果你真的想添加一堆依赖,写一个带有这些依赖的POM并添加它作为依赖。