【问题标题】:How to use the maven versions plugin to pick the next version number?如何使用 maven 版本插件选择下一个版本号?
【发布时间】:2013-10-20 22:59:55
【问题描述】:

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

【问题讨论】:

  • 你看过发布插件了吗?
  • @Henry 我正在实施这个 JavaOne 视频中描述的策略,用于与 maven youtube.com/watch?v=McTZtyb9M38 进行持续集成,如果您观看它将解释为什么发布插件不适合用于持续交付.

标签: java maven


【解决方案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

这很粗糙,但对我们来说效果很好。

我希望这会有所帮助。

【讨论】:

  • 您能否详细说明需要安装哪些命令行实用程序才能完成这项工作。也可以shell脚本编码吗?
  • 我其实没有使用任何特殊工具。我只是得到版本,使用 sed s/\./ /gtr ',' ' ' 拆分它,然后用 expr $VAL + 1 并运行 mvn 命令。该实现非常适合我们的环境。如果您想要一个通用示例,请告诉我。
  • 通用示例会很棒
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2017-11-06
  • 2018-04-05
  • 2017-05-05
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多