上一期,我提出了一个有关如何从命令行更改Maven项目版本的问题,这导致我遇到了新问题。
以前,我能够获得版本号,因为版本存储为易于通过命令行(bash)进行grep和解析的属性。现在已经使用了pom.xml元素,它不再是唯一的,因为所有依赖项(可能还有其他依赖项)也都使用了此元素。我认为,没有外部工具来解析xml或一些非常了解上下文的sed命令,就无法通过bash脚本获取当前版本号。
在我看来,最干净的解决方案是让Maven分发此版本信息。我当时正在考虑编写一个自定义的Maven插件来检索不同的属性,但是我想先在这里问一下。
那么,是否有任何简单的方法来获取${project.version}
命令行的值?提前致谢。
解
感谢您的帮助。我不得不cd
手动访问目录,但是可以轻松完成。在我的bash脚本中,我有
version=`cd $project_loc && mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`
这给了我当前的版本,然后可以进行升级。暂存可能会更简单,但是我想我想尽可能地强大,所以我对以数字开头的第一行感到满意,并尝试将其作为版本号来处理。
# Advances the last number of the given version string by one.
function advance_version () {
local v=$1
# Get the last number. First remove any suffixes (such as '-SNAPSHOT').
local cleaned=`echo $v | sed -e 's/[^0-9][^0-9]*$//'`
local last_num=`echo $cleaned | sed -e 's/[0-9]*\.//g'`
local next_num=$(($last_num+1))
# Finally replace the last number in version string with the new one.
echo $v | sed -e "s/[0-9][0-9]*\([^0-9]*\)$/$next_num/"
}
我通过简单地调用
new_version=$(advance_version $version)
希望这对某人有帮助。
grep -e '^[[:digit:]]'