更新Maven多模块项目中的版本

更新Maven多模块项目中的版本,maven,maven-3,Maven,Maven 3,我有一个Maven多模块项目,我想使用脚本将开发版本更新为给定值。聚合器POM只是一个聚合器,子对象不从中继承。这一点很重要,因为工件都是从其他POM文件继承的。这是我的结构 aggregator/ --projectA --projectB 另外,projectB对projectA具有Maven依赖性 首先,我尝试: mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set 它只更新了聚合器项目的版本

我有一个Maven多模块项目,我想使用脚本将开发版本更新为给定值。聚合器POM只是一个聚合器,子对象不从中继承。这一点很重要,因为工件都是从其他POM文件继承的。这是我的结构

aggregator/
--projectA
--projectB
另外,
projectB
projectA
具有Maven依赖性

首先,我尝试:

mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set
它只更新了聚合器项目的版本

如果我运行Maven发布过程,它会正确地更新
projectB
projectA
的依赖关系,以便在发布构建之后使用新的开发版本。因为发布过程处理得很好,所以我认为使用发布插件可以解决我的问题

因此,我尝试了以下方法:

mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions
这正确地更新了我的所有子项目。但是,它没有更新
projectB
projectA
的依赖版本


更新我的项目中所有开发版本的简单方法是什么,包括
projectB
projectA
的依赖性?

您可能会更幸运,但可能需要一些调整

versions:set
设计用于更新针对其执行的pom的版本。。。反应堆的根部

如果你遵循它的惯例,那么它就会起作用。。。但你需要知道它的惯例

当您指定了
/project/parent/version
/project/version
但“意外”处于相同的值时,版本插件假定这两个版本只是意外地相同,因此在更新父版本时不会更新子项目的版本
UpdateMachingVersions
告诉插件假定它不是意外事件,并且子插件应该处于锁定状态

如果您只指定
/project/parent/version
,而不指定项目版本,因此依赖于继承,插件将把子项目添加到版本更改列表中(从而再次循环所有项目,以确保它捕获任何其他需要的更改)

版本插件目前不提供将所有内容强制为一个版本的选项。。。尽管这可能是个好主意

你可以用三个命令得到你想要的

mvn versions:set -DnewVersion=...
cd projectA
mvn versions:set -DnewVersion=...
cd ../projectB
mvn versions:set -DnewVersion=...
这是因为如果父目录包含引用所调用项目的聚合器pom,
versions:set
将尝试“增长”反应器

换句话说,当您有一个没有公共父级的反应器时,版本会假定公共版本号是偶然的,但它会将每个模块的意图从更宽的反应器中提取到聚合器pom中
# for each module into aggregator pom
for module in $(grep "\<module\>" pom.xml | sed 's/<\/module>//g' | sed 's/.*<module>//g' | sed 's/.*\///g')
do
    # set the version of the module 
    # and update reference to this module into others modules
    mvn versions:set -DgenerateBackupPoms=false -DartifactId=$module \
        -DnewVersion=$newVersion -DupdateMatchingVersions=true
done
# set the version of the aggregator pom
mvn versions:set versions:commit -DnewVersion=$newVersion
对于$(grep“\”pom.xml | sed's///g'| sed's/*///g'| sed's/*///g') 做 #设置模块的版本 #并将对该模块的引用更新为其他模块 mvn版本:set-DgenerateBackupPoms=false-DartifactId=$module\ -DnewVersion=$newVersion-DupdateMatchingVersions=true 完成 #设置聚合器pom的版本 mvn版本:设置版本:commit-DnewVersion=$newVersion
我发现了与您相同的问题,然后我克隆了版本插件代码,然后我发现如果您将gropuId、artificatid、oldVersion值设置为be*将解决问题; 像这样:

mvn versions:set -DnewVersion=xxx -DgroupId=* -DartifactId=* -DoldVersion=* 

感谢您提供有关版本:set的信息。这确实可以更好地解释这种行为。可能是
updateMachingVersions
的默认值被更改了?在MVN3.2.5中,默认情况下它是
true
,我想要相反的结果<代码>mvn版本:设置更改的版本比我想要的多。我在这上面挠头,直到我找到了答案-DoldVersion=*对我来说是最重要的