结构
我知道这个项目结构不是“Maven 方式”,这就是我首先挣扎的原因。不幸的是,我无法更改项目结构。
我尽量简化它:
/module-a
/module-b
/module-c
/parent <- <parent>master</parent>, <modules>module-a, module-b, module-c</modules>
/parent/aggregator-d <- <parent>parent</parent>, <modules>module-a, module-b</modules>
/parent/aggregator-t <- <parent>parent</parent>, <modules>module-a</modules>
用例
所有模块的版本都应更改为给定版本。除了父模块,没有模块明确定义其版本,因此只需更改父版本。但是由于所有其他模块都引用了父版本,因此必须相应地更新它们。
这适用于父 POM(或激活的配置文件)部分中release:update-versions -DautoVersionSubmodules
列出的所有模块(在父级上使用)。<modules>
但是,其余模块aggregator-d
并aggregator-t
没有更新。
失败的尝试
所以我想我会单独更新剩余的模块,使用mvn --non-recursive
,但到目前为止没有运气。
使用发布插件,我只设法更新了他们自己的版本,release:update-versions
但是这不会更新引用的父版本,因此它会导致模块版本与父版本不同(发布添加了显式模块版本声明插入):
<parent>
[...]
<version>1.0.0-SNAPSHOT</version>
</parent>
<version>1.0.0-changed-SNAPSHOT</version> <- added by release plugin
使用版本插件失败,versions:set
因为模块版本是由其父版本定义的,versions:update-parent
不起作用,因为我无法指定新的父版本(而是将设置在远程存储库中找到的最新版本)并versions:update-child-modules
告诉我所有子模块都已启动迄今为止(因为这个想法是在引用我想要更新的模块的聚合器上运行它)。
其他想法
Maven 命令在 Jenkins 声明性管道中执行,所以也许我可以尝试 (deprecated) writeMavenPom
。
除此之外,使用类似sed
或maven-antrun-plugin
用于正则表达式替换的东西,我已经没有想法了。