如何使用模块化Maven项目管理版本号?

时间:2019-07-19 20:30:20

标签: java maven maven-3 build-system maven-module

我有一个相当典型的插件架构,看起来像这样(略大一些):

project
    core
    data
    main
    ui

父项目的版本号已定义,打包为pom,并在其pom.xml中定义了模块:

<groupId>group</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

...

<modules>
    <module>core</module>
    <module>data</module>
    <module>main</module>
    <module>ui</module>
</modules>

所有子模块都具有对父版本号无处不在的引用。这是一个主模块看起来可以给您带来想法的示例:

<parent>
    <groupId>group</groupId>
    <artifactId>project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<groupId>group</groupId>
<artifactId>project.main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
    <java.version>11</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>group</groupId>
        <artifactId>group.core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>group</groupId>
        <artifactId>group.data</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>group</groupId>
        <artifactId>group.ui</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

我们已经厌倦了必须在每个父模块,每个工件模块以及每个模块的每个依赖模块中的每个发行版中一遍又一遍地更改版本号。在某些情况下,有人使用搜索/替换命中其他文件并弄乱了构建。我们尝试使用属性,但是由于某些荒谬的原因,它在父级定义中不起作用。

父级中定义的版本号是我们唯一要管理的地方。我们甚至不需要子模块来拥有HAVE版本(或工件)。我们可以在其他Ant项目中做到这一点。我们可以在其他Gradle项目中做到这一点。我无法想象这在Maven中是不可能的,所以我想我们缺少了一些东西。

如何在一个地方定义项目的版本号,并将其用于模块的所有父项,工件和依赖项部分?

1 个答案:

答案 0 :(得分:0)

Version maven plugin提供了一次更改子项目版本的可能性。包含插件后:

mvn versions:set -DnewVersion=<your version>

如果一切正确:

mvn versions:commit