在终于厌倦了 maven 发布插件后,我决定转向更简单的东西。
我有一个项目,有几个模块。
当我做
mvn versions:set -DnewVersion=1.0.2-SNAPSHOT
它只是更改父模块并跳过所有子模块?
我究竟做错了什么?我还需要设置另一个参数吗?
在终于厌倦了 maven 发布插件后,我决定转向更简单的东西。
我有一个项目,有几个模块。
当我做
mvn versions:set -DnewVersion=1.0.2-SNAPSHOT
它只是更改父模块并跳过所有子模块?
我究竟做错了什么?我还需要设置另一个参数吗?
我有引用外部父母的子模块的同样问题。
如果孩子的父母版本与父母的本地版本匹配,那么它会更新父母和孩子的版本(它可能会说跳过但仍然有效,奇怪的是)。如果它们不匹配,那么它似乎只更新父版本并更新子代以指向新的父代,它根本不会改变子代的版本。
最后我发现通配符可以解决这个问题(需要一个新版本的版本插件):
mvn org.codehaus.mojo:versions-maven-plugin:2.2:set -DnewVersion=1.5.0a -DartifactId=* -DgroupId=*
或者,您也可以使用processAllModules参数。
$ mvn versions:set -DnewVersion=2.0.0 -DprocessAllModules
如果您像我一样的项目的子模块与父模块的版本不匹配,另一种选择是先调整它们以匹配:
$ mvn versions:update-child-modules
然后版本:设置(和版本:替换快照等)现在将按预期工作,而不需要更新版本的插件:)
$ mvn versions:set -DnewVersion=1.0.2-SNAPSHOT
我假设你的项目结构是这样的:
parent/pom.xml
child/pom.xml
然后你必须mvn versions:set -DnewVersion=1.0.2-SNAPSHOT
从parent/
目录运行。
可能是因为你没有在插件管理的父 pom 中声明插件。如果你想将插件传播给你必须在插件管理部分声明的孩子。
我最终运行 mvn -X 发现我的一个子 pom 以 UTF-8 BOM 编码保存:
[调试] 无法解析 child-project\pom.xml java.io.IOException:在 org.codehaus 中仅允许在开始标记之前使用空白内容,而不是 \uef(位置:START_DOCUMENT 看到 \uef...@1:1)。 mojo.versions.api.PomHelper.getRawModel (PomHelper.java:116)
异常在调试日志中“隐藏”。
我使用 UTF-8 编码重新保存它,它工作。
(遇到 Maven 3.5.4 / Versions-Maven-Plugin 2.7)
如果有人在寻找答案,下面的命令对我来说就像一个魅力
mvn release:update-versions -DdevelopmentVersion=4.4.0-SNAPSHOT