2017-04-07 52 views
0

我们有一个多模块版本。我有一个父模块构建了17个其他模块,其中一个模块本身是另一个多模块构建,构建了另外三个模块。maven模块构建。不指定具有儿童模块的版本

在我父模块:

<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),我发现我可以在子模块摆脱几乎任何类型的版本编号的。这使得维护复杂项目变得非常简单,因为大部分更改都将在父项中进行。当我们做新版本时,我不必更新其他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存储库中,并且所有模块对于此项目都是唯一的,并且不在其他任何地方使用,但我必须填写父级的版本号。我们甚至不会将这些模块的jar部署到我们的Maven仓库。这是一个巨大的构建。

我知道我可以使用版本插件来更新所有这些模块,但这意味着我们的开发人员必须记得在他们创建新版本的项目时使用该插件。 (我对开发人员没有太大的信心,哎,我们的wiki上有方向how to tie your shoes。)

那么,有没有一种方法可以让我们的子模块 - 在父模块中签出大的Git回购 - 可以避免将父版本号嵌入其中?

+0

我希望你使用SNAPSHOT的?你在做OSGi开发吗? – khmarbaise

回答

0

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

然而,一旦你已经设置为可以使用的版本插件,以便管理您所有的劲歌看到http://www.mojohaus.org/versions-maven-plugin/

例如,从顶级的版本:

mvn versions:set -DnewVersion=1.1 

将改变所有的孩子和父母。

+0

我知道版本插件,但开发人员使用Eclipse,而且大多数人对Maven并不擅长。我握了很多手。只要让他们在发布它时更改简单jar项目的版本号就足够了。 –

+0

@DavidW。所以你正在开发OSGi ...如果你这样使用Tycho?还有一个tycho-version插件,它也处理改变MANIFEST.MF,feature.xml等。 – khmarbaise

+0

从[Maven 3.5.0-beta-1]开始(https://maven.apache.org/maven-ci-friendly。 HTML)这是[不是真的了](http://blog.soebes.de/blog/2017/04/02/maven-pom-files-without-a-version-in-it/)。 – khmarbaise