【发布时间】:2020-06-16 22:12:55
【问题描述】:
结构
我知道这个项目结构不是“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(或激活的配置文件)<modules> 部分中列出的所有模块(在父级上使用 release:update-versions -DautoVersionSubmodules)。
但是,其余模块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 插件,versions:set 失败,因为模块版本是由其父级定义的,versions:update-parent 不起作用,因为我无法指定新的父级版本(而是在远程存储库将被设置)并且versions:update-child-modules 告诉我所有子模块都是最新的(因为我们的想法是在引用我想要更新的模块的聚合器上运行它)。
其他想法
Maven 命令在 Jenkins 声明式管道中执行,所以也许我可以尝试(已弃用)writeMavenPom。
除此之外,使用 sed 或 maven-antrun-plugin 之类的东西来替换正则表达式,我已经没有想法了。
【问题讨论】:
-
您确定不能更改项目结构吗?您是否与您的经理谈过并解释说目前的结构很糟糕?
-
是的,至少不是短期的。我将尝试为此积压一项任务。我想我们可以例如使用配置文件而不是单独的聚合器(因此默认情况下父级不会定义任何模块,而是提供定义所需模块的配置文件“父级”、“聚合器-d”和“聚合器-t”)。
-
这听起来也不是一个好主意。如果你只想构建一两个模块,为什么不在命令行中指定它们呢?
-
我想至少它会解决我现在遇到的问题。这两个聚合器模块还指定了其他属性、插件和依赖项,因此如果可能的话,命令行将不是很实用(并且不会在 Git 存储库中进行跟踪)。
标签: maven maven-release-plugin maven-versions-plugin