如何更新/修复单个子模块的父版本

问题描述 投票:0回答:1

结构

我知道这个项目结构不是“ 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-daggregator-t未更新。

尝试失败

所以我想我将使用mvn --non-recursive单独更新其余模块,但到目前为止还算运气。

使用release plugin,我只能使用mvn --non-recursive来更新其own版本,但是这不会更新所引用的父版本,因此导致模块版本不同于父版本版本(显式模块版本声明已由发布插件添加):

release:update-versions

使用版本插件release:update-versions失败,因为模块版本由其父版本定义,<parent> [...] <version>1.0.0-SNAPSHOT</version> </parent> <version>1.0.0-changed-SNAPSHOT</version> <- added by release plugin 不起作用,因为我无法指定新的父版本(相反,在远程存储库中找到的最新版本将被设置),versions:set告诉我所有子模块都是最新的(因为该想法是在引用我要更新的模块的聚合器上运行它)。

其他想法

Maven命令在Jenkins声明性管道中执行,所以也许我可以尝试(不建议使用的versions:set

除此之外,使用versions:update-parentversions:update-parent之类的东西进行正则表达式替换,我的想法已经用完了。

maven maven-release-plugin maven-versions-plugin
1个回答
0
投票

阅读有关Maven插件的更多文档,我注意到versions:update-child-modules的参数versions:update-child-modules表示:

如果要精确定义要使用的版本,则必须像这样使用它:writeMavenPom否则将使用较新的现有版本。

所以我将此信息与writeMavenPom一起应用于了sed的参数maven-antrun-plugin。然后,我得到了这个警告(虽然构建仍然成功):

[[警告]未更新版本:无法解析任何版本

幸运的是,我不需要所需的版本存在于remote存储库中,如果它存在于local存储库中就可以了。因此,我最终使所有工作正常进行的工作只是在使用newVersion之前是[P0]父POM。

总而言之,我现在要这样做(versions:update-propertyversions:update-property-DnewVersion=[19.0]解析为例如parentVersion):

versions:update-parent

此解决方案不是很好,但是我更喜欢使用正则表达式或不推荐使用的Jenkins API。

© www.soinside.com 2019 - 2024. All rights reserved.