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

时间:2013-05-31 20:49:02

标签: maven maven-3

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

aggregator/
--projectA
--projectB

此外,projectBprojectA具有Maven依赖关系。

首先我尝试了:

mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set

它只更新了aggregator项目的版本。

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

所以我尝试了以下内容:

mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions

这正确地更新了我的所有子项目。但是,它没有为projectB更新projectA的依赖项版本。

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

3 个答案:

答案 0 :(得分:6)

the release plugin你可能会有更多的运气,但可能需要一些调整

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=...

这是因为如果父目录包含引用被调用项目的聚合器pom,versions:set将尝试“增长”反应器......

换句话说,当你有一个没有共同父级的反应堆时,版本会假定通用版本号是偶然的,但它会从更广泛的反应堆中获取意图

答案 1 :(得分:2)

# 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

答案 2 :(得分:2)

我找到了同样的问题,然后我克隆版本的插件代码,然后我发现如果你设置gropuId,artifcatId,oldVersion值tobe *将解决问题; 像这样:

<ul class="hardcover_back">
相关问题