如何使用maven版本插件来选择下一个版本号?

时间:2013-10-13 05:40:58

标签: java maven

我的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作为下一个版本

1 个答案:

答案 0 :(得分: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版本:set -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

这很粗糙,但它对我们来说效果超过一年。

我希望这会有所帮助。