问题 Maven版本:set不更新子模块


在最终厌倦了maven发布插件之后,我决定继续采用更简单的方法。

我有一个项目,有几个模块。

当我做

mvn versions:set -DnewVersion=1.0.2-SNAPSHOT

它只是更改父级并跳过所有子级模块?

我究竟做错了什么?我还需要设置另一个参数吗?


9859
2018-01-26 12:31


起源

你能发贴pom.xml吗? - Behe
有一枪 mvn versions:update-child-modules - farmer1992
父pom和子模块使用<parent>标记,每个标记指向不同的父项以继承一些代码生成,而不是。我将发布修改后的pom.xml,因为我无法发布该实际内容。它可能是导致此行为的父标记吗? - user1043825
我尝试了'mvn版本:update-child-modules'它跳过了孩子,并说他们是最新的。 - user1043825
当子模块具有不是基本模块的父模块时,我遇到了这种行为。其他具有基本模块作为父模块的子模块正在更新而没有任何问题。 - Andrew Logvinov


答案:


我有同样的子模块引用外部父母的问题。

如果孩子的父版本与父母的本地版本匹配,那么它会更新父母和孩子的版本(可能会说SKIPPED但仍然有效,奇怪)。如果它们不匹配,那么它似乎只更新父版本并更新子项以指向新父项,它根本不会更改子项的版本。

最后我发现通配符可以解决这个问题(需要一个新版本的版本插件):

mvn org.codehaus.mojo:versions-maven-plugin:2.2:set -DnewVersion=1.5.0a   -DartifactId=*  -DgroupId=*

10
2017-08-06 17:26



通配符解决了我的多模块问题,其中在根POM中声明的模块之一被定义为独立模块,其POM不引用任何父POM,但仅具有其子模块,也可以是独立模块或引用父模块。在尝试了一些其他建议后,我花了一段时间才找到这个答案! - RZet
这个答案值得更多的支持。发生的事情是maven插件将工件id默认为当前聚合器的工件ID。导致聚合器子模块未更新。谢谢你的提示! - Rasha


我假设你的项目结构是这样的:

parent/pom.xml
child/pom.xml

然后你必须跑 mvn versions:set -DnewVersion=1.0.2-SNAPSHOT 从 parent/ 目录。


1
2018-01-23 09:27



棘手的部分是我有一个Master pom.xml(它的包装是'pom')定义了子模块。在这种情况下,你仍然是正确的,我必须按照你提到的那样定位我的'parent / pom.xml'。此外,FWIW,而不是执行 parent/,您也可以添加参数 -f parent/pom.xml,这也很有效。 - Cody S


如果你喜欢我的项目,其子模块与父版本不匹配,另一个选择是调整它们以匹配第一个:

$ mvn versions:update-child-modules

那么版本:set(和版本:replace-snapshot等)现在可以按预期工作,而不需要更新版本的插件:)

$ mvn versions:set -DnewVersion=1.0.2-SNAPSHOT

1
2018-05-11 19:56





也许是因为你没有在插件管理中的父pom中声明插件。如果要将插件传播给子节点,则必须在插件管理部分中声明。

看到: http://maven.apache.org/pom.html#Plugin_Management


0
2018-02-27 10:56





或者你也可以使用 processAllModules 参数。

$ mvn versions:set -DnewVersion=2.0.0 -DprocessAllModules

0
2018-02-07 10:40