java 在“无法解析命令行选项”之后使maven ignore / continue

kyvafyod  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(101)

在重写CI管道脚本时,我偶然发现

$ mvn $MAVEN_CLI_OPTS clean compile
Unable to parse command line options: Unrecognized option: --no-transfer-progress

当尝试将--no-transfer-progress添加到默认设置时。这发生在shell executor runner中,当然是由于过时的Maven版本。虽然我已经通过SDKMAN找到了一个解决方案!为了将最新的maven版本安装到这样的runner上,我希望我的CI脚本尽可能通用,即。对于缺少.sdkmanrc文件的项目管道,并且只是希望依赖该运行程序上的默认maven版本(我无法控制),不会失败。
那么,有没有一种方法可以让maven忽略未识别的选项并继续执行呢?

f87krz0w

f87krz0w1#

由于到目前为止所有的反馈都表明这是不可能的,我将一个bash脚本集成到CI管道中,根据当前可用的maven版本逐步增强CLI选项:

INSTALLED_MAVEN=$(mvn -version | grep -o "Apache Maven [\.0-9]*" | cut -d" " -f 3)

# --no-transfer-progress was introduced in Version 3.6.1
if [ $(printf "${INSTALLED_MAVEN}\n3.6.1" | sort -V | head -1) = "3.6.1" ]; then
  MAVEN_CLI_OPTS="$MAVEN_CLI_OPTS --no-transfer-progress"
fi

# --color was introduced in version 3.8.2
if [ $(printf "${INSTALLED_MAVEN}\n3.8.2" | sort -V | head -1) = "3.8.2" ]; then
  MAVEN_CLI_OPTS="$MAVEN_CLI_OPTS --color=always"
fi

显然有改进的空间,即通过使版本比较算法DRY,但到目前为止,这对我们来说是一个魅力。
然而,总是热衷于学习,如果有一个更聪明的方法来实现这一点。

相关问题