# Maven BOM – 物料清单依赖项

> 原文： [https://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/](https://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/)

如果您在项目中为依赖项管理使用过 [**maven**](//howtodoinjava.com/maven/ "Maven Tutorials")，那么您必须至少遇到一个问题，或者可能更多。 问题是**版本不匹配**。 通常，当您获得一些依赖项并将其相关的依赖项与特定版本协作时，就会发生这种情况。 并且，如果您已经包含了具有不同版本号的那些依赖项，则它们可能在编译时以及运行时都面临不良结果。

理想情况下，为避免上述问题，您需要明确排除相关的依赖项，但您很有可能会忘记这样做。

要解决版本不匹配的问题，您可以使用“**物料清单**”（BOM）依赖项的概念。 BOM 依赖项跟踪版本号，并确保所有依赖项（直接和传递）都处于同一版本。

## 1\. 如何添加 Maven BOM 依赖

Maven 为此提供了一个标签`dependencyManagement`。 您需要按如下所示在此标记中添加 **maven bom** 信息。 我以 Spring Bom 文件为例。

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

```

使用 BOM 的另一个好处是，根据 Spring 框架工件，您不再需要指定`version`属性。 因此它将完全正常。

```java
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>

```

## 每个项目都有自己的 Maven Bom 文件

请注意，没有通用或通用的 Bom 文件。 每个项目（如果支持此功能）都提供自己的 Bom 文件并管理其相关依赖项的版本。

以下是各种 Bom 文件的几个示例：

**1）RESTEasy Maven BOM 依赖项**

```java
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.jboss.resteasy</groupId>
			<artifactId>resteasy-bom</artifactId>
			<version>3.0.6.Final</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

```

**2\. JBOSS Maven BOM 依赖项**

```java
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.jboss.bom</groupId>
			<artifactId>jboss-javaee-6.0-with-tools</artifactId>
			<version>${some.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement> 

```

**3）Spring Maven BOM 依赖项**

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

```

**4）Jersey Maven BOM 依赖项**

```java
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

```

这些只是几个例子。 因此，下次您在 Maven 中工作时，请尝试探索此功能。

## 3\. Maven BOM 与 POM

首先，BOM 是普通的`pom.xml`文件 - 它们不包含源代码，它们的唯一目的是声明其捆绑的模块。 它定义了将在库中创建的所有工件的版本。 其他希望使用该库的项目应将此 pom 导入到其 pom 的`dependencyManagement`部分。

POM 文件不仅仅是依赖项。 例如组织和许可证，项目所在的 URL，项目的依赖项，插件，配置文件等等。 它还控制项目的完整构建过程。

学习愉快！

参考：

[POM – Maven 文档](https://maven.apache.org/pom.html)

[Maven 依赖机制](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)