Maven2继承

时间:2009-02-13 08:09:44

标签: maven-2

如果我有一个父pom并希望将其继承到多个项目。我通常在项目<parent> ... </parent>的顶部添加。我不喜欢这种方法的是,如果我父母的某些内容发生了变化,我必须编辑该父项继承的所有项目以修改版本号。有更好的方法吗?我希望我能解释的是可以理解的。

提前致谢。

5 个答案:

答案 0 :(得分:16)

  

我不喜欢这种方法   如果我的事情发生了变化   父母我必须编辑所有项目   由父母继承的   修改版本号。有没有   更好的方法?

是的!看一下Maven Versions Plugin,具体来说:

  

版本:update-child-modules 更新的父节   一个项目的子模块所以   版本匹配的版本   当前的项目。
  例如,如果你   有一个聚合器pom也是   它的项目的父项   聚合以及孩子和父母   版本变得不同步,这个mojo   可以帮助修复孩子的版本   模块。
  (注意,您可能需要调用   带有-N选项的Maven以便   如果您的项目是,请运行此目标   破碎得太厉害,无法建造   因为版本不匹配)。


编辑:当然,使用Maven3,您现在可以拥有&lt;版本&gt; -less&lt;父母&gt;子模块中的元素:

  

在多模块或多pom项目中工作的开发人员不必在Maven 3中的每个子模块中指定父版本。相反,您可以添加无版本的父元素。

Ref

答案 1 :(得分:8)

您可以在发布时使用Maven Release Plugin。它将自动更新所有版本号并在源代码管理中创建一个标记(如果您在POM中配置了SCM)。

我执行发布的命令通常如下,之后我从SCM导出标记并使用“mvn clean package”或“mvn clean deploy”构建它。

  svn update   (or whatever SCM you use)
  mvn clean
  mvn release:prepare -DautoVersionSubmodules=true
  mvn release:clean

因此,例如,如果您的版本是第一个“1.0-SNAPSHOT”,则发布插件将创建标签“projectname-1.0”,版本为“1.0”,最后将当前版本增加到“1.1-SNAPSHOT”。插件会询问您的版本和标签名称,因此您可以覆盖默认值。

答案 2 :(得分:6)

自动父版本控制(即省略标记)是Maven空间中一个有争议的问题。 There is a defect logged against it。目前,它被视为2.1版本分支的修复或改进,

答案 3 :(得分:3)

您应该将版本保留为快照,直到发布为止。这样,每次更换pom时都不必更改它。然而,一旦你发布了父pom,你就会想要对所有孩子做出改变(假设父母在“reactor”构建之外......否则它会被释放插件碰到一起)。有一个相对较新的插件,名为versions-maven-plugin,可以帮助更改版本。

答案 4 :(得分:2)

我认为重要的是要在多模块构建中,maven 始终使用来自本地存储库的版本。这也适用于多模块构建!因此,当您引用“父”pom时,您将从本地maven存储库获取已发布的父工件。因此,当您执行 mvn install 时,您会反复将每个模块发布到本地仓库。

开发时,您自己的模块可能会被版本化为X.X-SNAPSHOT。对父pom的引用是X.X-SNAPSHOT。在准备发布之前不要更改这些。

所以一个简单的案例是: 在初始发布之前,所有模块都称为1.0-SNAPSHOT。 当初始发布“黄金版”时,将所有1.0-SNAPSHOT模块重命名为1.0。 在1.1版本上开始开发时,将所有版本号更改为1.1-SNAPSHOT。 等等...

自定义是在您发布之前使用快照版本,此时您可以在任何地方更新版本号。在日常开发中,您不会更改版本号,因为快照版本的处理方式与硬版本版本不同。

修改 经过一番思考后,我认为您在“评论”部分中的一些混淆源于此:您的pom中的版本号反映了整个应用程序版本。任何给定的 pom 更改都不一定会更改应用程序版本号。如果您需要跟踪pom中的更改,我建议您使用源控制系统。因此,在您使用版本1.0的3个月内,将版本号保持在1.0-SNAPSHOT是合理的。在(例如)3周期间,您使用1.1,版本号为1.1-SNAPSHOT。