【问题标题】:how to get mvn install fail if there are warnings on pom validation?如果 pom 验证出现警告,如何让 mvn install 失败?
【发布时间】:2020-09-04 08:20:17
【问题描述】:

我启动了一个带有一些警告的 maven 构建(来自本地环境或詹金斯),例如:

[WARNING] Some problems were encountered while building the effective model for com.example:application:jar:1.0-SNAPSHOT
[WARNING] some random warning @ com.example:application:${project.version}, /var/jenkins_home/workspace/com-example/example/pom.xml, line 14, column 11

如果出现这种警告,有没有办法让 mvn 构建失败?

让我澄清一下:

我不需要特定参数(project.version 变量)的解决方案

我在跑步时需要它

mvn install

我得到一个“[WARNING] ...somethingsomething”

mvn 构建失败,我得到一个 1 作为进程的返回码:

mvn install
...
[WARNING]...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE

【问题讨论】:

  • 不幸的是,事实并非如此。我没有java编译错误。我有畸形的 poms。例如:没有版本的依赖,在不允许的地方使用的变量等
  • 我更新了第一篇文章以添加更明确的警告
  • 问题是您使用的是 <version>${version}</version> 这样的版本的表达式,而不是文字值,或者如果您使用的是 ci friendly,则必须使用一组特定的属性,包括。扁平化 Maven 插件。否则,这将导致其他喜欢使用它的人无法使用 pom。这是一个大问题。你应该解决这个问题......
  • @khmarbaise 我知道具体问题是什么,如果出现这样的问题,我只需要构建失败。我更新了帖子,试图更清楚
  • 这已经被问过了here

标签: java maven jenkins lint


【解决方案1】:

解决方案实际上比预期的要容易。 只需要一个小脚本来运行构建。我省略了一些环境变量。

另外,我发现使用“管道”|操作员,我隐藏了第一个命令的结果,我发现使用 PIPESTATUS env var 可以获得特定管道阶段的结果

./mvnw $MVN_CLI_OPTS -f $1 $2 | tee build.log
if [[ "${PIPESTATUS[0]}" == "1" ]]; then
    echo "mvn build failed"
    return 1
fi
#this will grep only in the first n rows of the log
head -n30 build.log | grep -in "\[WARNING\]"
if [[ ! -z "$FAIL_ON_WARNING" && $? == 0 ]]; then
    echo "--------------------------------------"
    echo "PLEASE FIX MAVEN BUILD WARNINGS AND RETRY"
    echo "BUILD STATUS: FAILED"
    echo "--------------------------------------"
    return 1
fi

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2020-03-24
    • 2014-03-21
    • 1970-01-01
    • 2012-04-29
    • 2023-01-31
    • 2018-01-14
    • 2015-07-27
    • 2019-09-12
    相关资源
    最近更新 更多