我有Maven多模块项目,我想使用脚本将开发版本更新为给定值.聚合器POM只是一个聚合器,孩子们不会从中继承.这很重要,因为工件都继承自其他POM文件.这是我的结构
aggregator/
--projectA
--projectB
Run Code Online (Sandbox Code Playgroud)
此外,projectB
还有Maven依赖projectA
.
首先我试过:
mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set
Run Code Online (Sandbox Code Playgroud)
它只更新了aggregator
项目的版本.
如果我运行Maven发布过程,它会正确更新 在发布版本之后使用新开发版本projectB
的依赖性projectA
.因为发布过程处理得很好,我认为使用发布插件可能会解决我的问题.
所以我尝试了以下方法:
mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions
Run Code Online (Sandbox Code Playgroud)
这正确地更新了我的所有子项目.但它没有更新projectB
的依赖版本projectA
.
什么是更新项目中所有开发版本的简单方法,包括projectB
依赖于projectA
?
你可能对发布插件有更多的运气,但可能需要一些调整
versions:set
旨在更新它执行的pom的版本...即反应堆的根.
如果你遵循它的约定,那么它将起作用......但你需要知道它的约定.
当你有/project/parent/version
并且 /project/version
两者都指定但是"意外地"处于相同的值时,版本插件假定这两个版本只是偶然相同,因此在更新父版本时不会更新子项目的版本.updateMatchingVersions
告诉插件假设我们不是一个意外,并且孩子应该处于锁定状态.
如果您只指定/project/parent/version
并保留项目版本未指定,因此依赖继承,插件会将子项目添加到版本更改列表中(因此再次遍历所有项目以确保它捕获任何其他所需的更改)
版本插件目前不提供强制所有版本的选项...虽然这可能是一个好主意.
你可以用三个命令得到你想要的东西,例如
mvn versions:set -DnewVersion=...
cd projectA
mvn versions:set -DnewVersion=...
cd ../projectB
mvn versions:set -DnewVersion=...
Run Code Online (Sandbox Code Playgroud)
这是因为versions:set
如果父目录包含引用被调用项目的聚合器pom,它将尝试"增长"反应器...
换句话说,当你有一个没有共同父级的反应堆时,版本假定公共版本号是偶然的,但它会从更广泛的反应堆中获取意图
归档时间: |
|
查看次数: |
2391 次 |
最近记录: |