maven模块构建。不指定带子模块的版本

时间:2017-04-07 15:12:50

标签: maven module

我们有一个多模块构建。我有一个构建17个其他模块的父模块,其中一个模块本身是另一个构建其他三个模块的多模块构建。

在我的父模块中:

<groupId>com.veggicorp.foobar</groupId>
<artifactId>foobar-parent</artifactId>
<version>5.4.3</version>

<properties>
    <!-- Definition of versions for third party jars -->
</properties>

<dependencyManagement>
    <!-- Another way to specify dependencies throughout the project -->
</dependencyManagement>

<modules>
    <!-- List o' Modules -->
</modules>

通过使用属性来指定版本(并使用dependencyManagement),我发现我可以摆脱子模块中几乎任何类型的版本编号。这使得维护复杂项目变得非常简单,因为大多数更改将在父项中进行。当我们开发新版本时,我不必更新其他21个pom.xml文件。

然而,有一个痛点:我必须指定父版本:

<parent>
    <groupId>com.veggicorp.foobar</groupId>
    <artifactId>foobar-parent</artifactId>
    <version>5.4.3</version> <!-- Must Specify -->
</parent>

<artifactId>foo-server</artifactId>
<!-- No need for a version -->

<build>
    ....

请注意,我不需要指定孩子的版本。它默认采用父版本。但是,我必须填写父版本的版本号,尽管所有这些都位于单个Git存储库中,并且所有模块对于此项目都是唯一的,并且不会在其他任何地方使用。我们甚至不会部署这些模块&#39;罐子到我们的Maven仓库。这是一个巨大的建筑。

我知道我可以使用版本插件来更新所有这些模块,但这意味着我们的开发人员必须记住在创建项目的新版本时使用该插件。 (我不太相信我们的开发人员。哎呀,我们在how to tie your shoes上有关于我们维基的指示。)

那么,有没有办法让我们的子模块 - 在一个大的Git仓库中使用父模块进行检查 - 可以避免在其中嵌入父版本号?

1 个答案:

答案 0 :(得分:0)

答案是否定的,您必须在所有子模块中包含父信息,并且该信息必须包含该版本。

然而,一旦你设置了它,你可以使用版本插件来管理你所有poms的版本http://www.mojohaus.org/versions-maven-plugin/

示例,从顶层:

mvn versions:set -DnewVersion=1.1

将改变所有孩子和父母。