Maven BOM [Bill Of Materials] 依赖

Posted

技术标签:

【中文标题】Maven BOM [Bill Of Materials] 依赖【英文标题】:Maven BOM [Bill Of Materials] Dependency 【发布时间】:2016-11-24 13:28:40 【问题描述】:

我不明白 bom 对象的目的是什么?我正在使用 Spring 3.2.8 版本和 JBoss 服务器,那么我需要使用哪个 bom 依赖项?当我在 pom.xml 中提到以下依赖项时:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
</dependency>

jar 文件是否会下载到我的 Maven 依赖项中?

【问题讨论】:

文档回答了您的问题:Maven "Bill Of Materials" Dependency。如果你想使用 Spring 3.2.8,那么显然你需要为 Spring 3.2.8 而不是 Spring 4.0.1 导入 POM... 感谢您的回复,实际上我的应用程序在 tomcat web 服务器上运行良好,现在我必须在 JBoss 服务器上运行。我想做出哪些改变?在配置和依赖方面? 【参考方案1】:

bom 对象的用途是什么?

Maven 父子关系对于在一个地方管理多个项目的依赖关系非常方便。但是,Maven 项目只能有一个(直接)父级。因此引入了依赖项管理的导入,以允许使用多个项目来管理您的依赖项。通过导入,您可以像这样定义单个依赖项并管理多个依赖项 - 方便!尽管您可以导入任何项目,但 BOM 是一个特殊项目,旨在用于此类导入。通常一个 BOM 项目除了dependencyManagement 部分之外定义的很少,并且不会有任何无关的依赖项,以免对您的主项目造成太大影响。

我需要使用哪个 bom 依赖项?

BOM 不是必需的,您也不需要使用。相反,您可以自己在 dependencyManagement 部分中定义所有托管依赖项。这些可以包括 Spring、JBoss 和任何其他依赖项。然而,BOM 为您大大简化了这一过程。您可以根据需要添加任意数量的 BOM,因此请同时添加!但正如@Jesper 提到的,不要忘记使用正确的版本。使用多个 BOM 时,如果它们都引用公共依赖项,它们的顺序将很重要。

jar 文件是否会下载到我的 Maven 依赖项中?

注意 BOM 是 &lt;type&gt;pom&lt;/type&gt;,而不是默认的 jar。所以没有要下载的jar。 Maven 将下载并读取单个 pom.xml 文件。

【讨论】:

感谢您的解释。 似乎将 ..bom 的属性导入到我们导入的地方/项目中存在问题 &lt;type&gt;&lt;import&gt; 对于 &lt;dependencyManagment&gt; 标签中的那些 maven 依赖项的默认值是什么? 默认类型为jar,默认范围为compile,没有import标签。欲了解更多信息,请参阅maven.apache.org/guides/introduction/… 我花了一天时间把bom放到依赖管理部分,希望maven能下载bom中的所有jar。只有在我阅读了你的答案之后,我才意识到,我们必须将我们自己需要的依赖项与 bom 一起放入 pom 中。 bom 所做的唯一帮助是维护 jar 的版本。谢谢你的解释。

以上是关于Maven BOM [Bill Of Materials] 依赖的主要内容,如果未能解决你的问题,请参考以下文章

The Basics of the Doherty Amplifier-Bill Slade

SBOM(Software Bill of Materials,软件物料清单)

Maven中BOM

maven之BOM及BOM和provided的一个小坑

如何在 Maven 中使用 BOM 文件?

导入物料清单中使用的 maven 属性(bom)