在Maven物料清单(BOM)中为单个条目设置所有Maven子模块的版本

时间:2017-11-28 11:42:51

标签: java maven dependency-management maven-bom

我有一个有几个子模块的库。我已在父POM中设置了库的版本。

<groupId>com.softtech</groupId>
<artifactId>BatchLibrary</artifactId>
<version>2.1</version>
<packaging>pom</packaging>

此外,我创建了一个Maven物料清单(BOM)项目,其中定义了此库。

在第一种情况中,我在BOM中设置整个库的版本,如下所示

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.softtech</groupId>
            <artifactId>BatchLibrary</artifactId>
            <version>2.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

在第二种情况中,我为每个子模块单独设置版本,如下所示

<dependencyManagement>
    <dependencies>
      <dependency>
          <groupId>com.softtech</groupId>
          <artifactId>BatchLibrary-core</artifactId>
          <version>2.1</version>
      </dependency>
      <dependency>
          <groupId>com.softtech</groupId>
          <artifactId>BatchLibrary-web</artifactId>
          <version>2.1</version>
      </dependency>
    </dependencies>
</dependencyManagement>

我已将此BOM添加到我的项目中。在我的项目中声明库的子模块没有版本时。在上面提到的第一种情况下,我收到错误

  

缺少dependency.version

在第二种情况下,它工作正常。

这是BOM的工作原理吗?我是否必须在BOM中单独定义所有子模块,或者我可以用版本定义我的库的父POM,它应该可以工作。如果应该?为什么它在我的情况下不起作用?

1 个答案:

答案 0 :(得分:0)

BOM应列出所有工件的版本。我从Maven网站的Importing Dependencies部分剪下了以下信息&#34;依赖机制简介&#34;:

  

项目的根源是BOM pom。它定义了将在库中创建的所有工件的版本。其他希望使用该库的项目应将此pom导入其pom的dependencyManagement部分。