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

dma*_*a_k 12 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>
Run Code Online (Sandbox Code Playgroud)

在标记模块之前转换为:

<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>
Run Code Online (Sandbox Code Playgroud)

在发布成功后转化为:

<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>
Run Code Online (Sandbox Code Playgroud)

我觉得它需要混合使用

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
Run Code Online (Sandbox Code Playgroud)

依赖关系是:

myproject-api ? myproject-parent
myproject-impl ? myproject-parent
myproject-impl ? myproject-api
Run Code Online (Sandbox Code Playgroud)

该项目的父POM(myproject-parent)很少发布,因此将首先发布.然后myproject-api(如果需要)然后myproject-impl.

khm*_*ise 5

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

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

  • 我不能同意你的看法.我们有扁平的模块结构:这是在Hudson中使它们分离和独立的唯一方法(否则在子模块中测试失败会导致整个项目构建失败).一些模块(例如父POM)很少更改:无需释放它们.其他人(如"模特")将被释放几次.如果我在两个多模块项目之间存在依赖关系,那么您的建议不起作用.即使对于多模块构建,我也没有证据表明`release:prepare`将用"future release"版本替换`-SNAPSHOT`依赖项. (3认同)