如何正确使用 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并添加它作为依赖。
我已经很久没有这样做了,所以我似乎忘记了正确的做法。我想创建 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并添加它作为依赖。