12

如果 Maven 大师社区可以帮助我完成以下任务,那就太好了。

我想以批处理模式运行发布过程的方式自动化哈德逊中 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>. 单片机结构如下:

 .
 |
 +-- 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

4

1 回答 1

5

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

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

于 2012-05-11T12:36:28.097 回答