如果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
。
答案 0 :(得分:5)
您遇到的一个简单问题是您的父级版本号与您的子级版本号不同,这对于多元模块构建来说是错误的方式。多模块构建旨在具有许多相关的模块,这些模块具有相同的发布过程,从该模块具有相同的版本号。如果您遵循该指南,则不需要版本插件,您只需通过发行版进行发布:准备和发布:执行就是这样。
<强>更新强> 在进一步的讨论之后,我建议设置一组新的Hudson作业,其中包含模块之间的依赖关系(下游/上游deps。),并在每个hudson作业上执行一个释放,触发作业字符串中的下一个,依此类推。这个先决条件是在版本控制中也有单独的模块和单独的区域。否则,这场战斗将与Maven失去并使生活复杂化。