我的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 :(得分: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
这很粗糙,但它对我们来说效果超过一年。
我希望这会有所帮助。