gpt4 book ai didi

bash - 如何在bash命令行获取Maven项目版本

转载 作者:行者123 更新时间:2023-12-02 19:02:17 26 4
gpt4 key购买 nike

上一篇我在 how to change Maven project vesion from command line 上提出了一个问题这导致我遇到了一个新问题。

以前我能够获取版本号,因为版本被存储为易于从命令行(bash)进行 grep 和解析的属性。现在 pom.xml <version>元素用于此目的,它不再是唯一的,因为所有依赖项以及其他一些依赖项也使用它。我认为没有办法使用 bash 脚本获取当前版本号没有用于解析 XML 的外部工具或一些非常上下文感知的 sed命令。

我认为最干净的解决方案是让 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 } }'`

这给了我可以升级的当前版本。 Grepping 可能更简单,但我想我希望尽可能强大,所以我对以数字开头的第一行感到满意,并尝试将其作为版本号处理。

# 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)

最佳答案

Maven Help Plugin不知何故已经为此提出了一些建议:

  • help:evaluate evaluates Maven expressions given by the user in an interactive mode.

以下是如何在命令行上调用它来获取${project.version}:

mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
-Dexpression=project.version

noted in the comments通过 Seb T ,要仅打印没有 Maven INFO 日志的版本,请另外使用 -q -DforceStdout:

mvn help:evaluate -Dexpression=project.version -q -DforceStdout

关于bash - 如何在bash命令行获取Maven项目版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com