2013-10-13 74 views
0

我有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-快照作爲下一版本
+0

你看看發佈插件嗎? – Henry

+1

@Henry我正在實施在此JavaOne視頻中描述的策略,以便與maven http://www.youtube.com/watch?v=McTZtyb9M38進行持續集成,如果您觀察它,它將解釋爲什麼發佈插件不是好的用於持續交付。 – ams

回答

1

我有類似的需求,我決定實施一個外部bash腳本來管理這個。

我們不使用maven-release插件,因爲我們不使用SNAPSHOT並且不使用SCM連接。

我從pom.xml中

CURRENT_VERSION =`回波-e加載當前版本 ':項目/ X:setns X = http://maven.apache.org/POM/4.0.0 \ NCAT/X版本/文本()' | 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 

這是粗略的一個通用的例子,但它運作良好,對我們一年多了。

我希望這會有所幫助。

+0

您能否詳細說明需要安裝哪些命令行實用程序來完成此項工作。也可以在shell腳本代碼? – ams

+0

我其實並沒有使用任何特殊的工具。我只是得到版本,通過使用** sed s /\.// g **或** tr',''**分割它,然後處理我需要的數字** expr $ VAL + 1 * *並運行** mvn **命令。 該實施對我們的環境非常具體。讓我知道你是否想要一個通用的例子。 –

+0

通用示例將是美妙的 – ams