0

我有看起来像这样的Maven项目结构

project/
   pom.xml  // parent and aggregator pom
   module1/
      pom.xml
   module2/
      pom.xml

我想要做的是从 pom.xml 开始更改项目版本并一直到子项目。

我可以使用版本插件mvn versions:set -DnewVersion=1.0.3-SNAPSHOT来明确指定新版本,并且它可以将项目的版本号更改为明确指定的版本。

有没有办法使用版本插件,以便它根据当前版本号自动选择下一个版本号。

  • 如果版本号是 0.0.1-SNAPSHOT 它应该选择 0.0.1 作为下一个版本
  • 如果版本号是 0.0.1 它应该选择 0.0.2-SNAPSHOT 作为下一个版本
4

1 回答 1

1

我有类似的需求,我决定实现一个外部 bash 脚本来管理它。

我们不使用 maven-release 插件,因为我们不使用 SNAPSHOT,也不使用 SCM 连接。

我从 pom.xml 加载当前版本

CURRENT_VERSION=`echo -e 'setns x= http://maven.apache.org/POM/4.0.0 \ncat /x:project/x:version/text()' | xmllint --shell pom.xml | grep -v /`

并在其上运行一些逻辑来设置新版本。然后,我跑

mvn 版本:设置 -DnewVersion=$MY_NEW_VALUE

之后,我运行构建。

这是我所做的一个通用示例

#!/bin/bash
# Increment an existing version in pom.xml and run a new build with it

# Error message and exit 1
abort()
{
    echo;echo "ERROR: $1";echo
    exit 1
}

# Accept a version string and increment its last element (assume string is passed correctly)
incrementVersionLastElement()
{
    IN=$1

    VER1=`echo $IN | awk -F\. 'BEGIN{i=2}{res=$1; while(i<NF){res=res"."$i; i++}print res}'`
    VER2=`echo $IN | awk -F\. '{print $NF}'`
    VER2=`expr $VER2 + 1`
    OUT="$VER1.$VER2"

    echo $OUT
}

# Getting project version from pom.xml
PROJECT_VERSION=`echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:version/text()' | xmllint --shell pom.xml | grep -v /`
echo Current project version: $PROJECT_VERSION

NEW_PROJECT_VERSION=`incrementVersionLastElement $PROJECT_VERSION`

# Setting the new version
mvn versions:set -DnewVersion=$NEW_PROJECT_VERSION
if [ "$?" != "0" ]
then
    abort "maven failed"
fi

# Run the maven main build
mvn clean install
if [ "$?" != "0" ]
then
    abort "maven failed"
fi

这很粗糙,但对我们来说效果很好,一年多了。

我希望这有帮助。

于 2013-10-13T06:23:25.560 回答