让maven在“无法解析命令行选项”之后忽略/继续

问题描述 投票:0回答:1

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

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

尝试将

--no-transfer-progress
添加到默认设置时。这发生在 shell 执行器运行程序中,当然是由于 Maven 版本过时。虽然我已经通过 SDKMAN 找到了解决方法!为了将最新的 Maven 版本安装到此类运行器上,我希望我的 CI 脚本尽可能通用,即对于缺少
.sdkmanrc
文件的项目管道不会失败,并且只想依赖该运行器上的默认 Maven 版本(我无法控制)。

那么,有没有办法让maven忽略无法识别的选项并继续执行?

java maven command-line-interface gitlab-ci
1个回答
0
投票

由于迄今为止的所有反馈表明这是不可能的,我将 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还有改进的空间,但到目前为止对我们来说就像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.