使用发行版+版本插件完全自动化发布过程

时间:2012-05-10 19:35:39

标签: maven maven-release-plugin versions-maven-plugin

如果Maven大师社区可以帮助我完成以下任务,那将会很棒。

我想在Hudson中以释放进程以批处理模式运行的方式自动化Maven模块的发布过程(不需要从控制台询问任何内容)。目前,我使用常见步骤release:prepare(使用<preparationGoals>versions:update-parent clean verify</preparationGoals>将父级更新为提交前的最新版本)+ release:perform。不过我希望Maven能够做到以下几点:

在准备步骤中有些人:

  • 对于与当前模块和父groupId匹配的所有依赖项,请将-SNAPSHOT替换为已发布的版本(例如versions:use-releases -Dincludes=???)。

发布后的某些内容:

  • 对于与当前模块和父groupId匹配的所有依赖项,请将发布版本替换为-SNAPSHOT版本(例如versions:use-latest-snapshots ...)。

示例:

<parent>
    <groupId>org.mycompany.myproject</groupId>
    <artifactId>myproject-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>myproject-api</artifactId>
    <version>1.1-SNAPSHOT</version>         
</dependency>
标记模块之前的

转换为:

<parent>
    <groupId>org.mycompany.myproject</groupId>
    <artifactId>myproject-parent</artifactId>
    <version>1.0</version>
</parent>

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>myproject-api</artifactId>
    <version>1.1</version>          
</dependency>

并且在发布成功后转换为:

<parent>
    <groupId>org.mycompany.myproject</groupId>
    <artifactId>myproject-parent</artifactId>
    <version>1.1-SNAPSHOT</version>
</parent>

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>myproject-api</artifactId>
    <version>1.2-SNAPSHOT</version>         
</dependency>

我觉得它需要混合

versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit

但我不确定这样做的最佳方法是什么。特别是提交尽可能少的提交会很不错:难度是reparationGoals-SNAPSHOT版本检查后运行。

所描述的项目不是一个多模块项目,因为父POM没有通过<modules>引用它的孩子。 SCM结构如下:

 .
 |
 +-- myproject-parent
 |   +-- pom.xml
 +-- myproject-api
 |   +-- pom.xml
 +-- myproject-impl
     +-- pom.xml

依赖关系是:

myproject-api → myproject-parent
myproject-impl → myproject-parent
myproject-impl → myproject-api

项目的父POM(myproject-parent)将很少发布,因此将首先发布。然后myproject-api(如有必要),然后myproject-impl

1 个答案:

答案 0 :(得分:5)

您遇到的一个简单问题是您的父级版本号与您的子级版本号不同,这对于多元模块构建来说是错误的方式。多模块构建旨在具有许多相关的模块,这些模块具有相同的发布过程,从该模块具有相同的版本号。如果您遵循该指南,则不需要版本插件,您只需通过发行版进行发布:准备和发布:执行就是这样。

<强>更新 在进一步的讨论之后,我建议设置一组新的Hudson作业,其中包含模块之间的依赖关系(下游/上游deps。),并在每个hudson作业上执行一个释放,触发作业字符串中的下一个,依此类推。这个先决条件是在版本控制中也有单独的模块和单独的区域。否则,这场战斗将与Maven失去并使生活复杂化。