首页 > 解决方案 > 添加遇到的警告数量作为 Maven“占位符”

问题描述

例如,在 Maven 中,您可以使用“占位符” ${maven.build.timestamp}。有没有办法让我得到一个占位符,比如说${warnings},它包含构建项目时遇到的警告数量?

例子:

"[!] This Build is version ${project.version}, and was compiled on ${maven.build.timestamp} UTC." + System.lineSeparator() + "[!] ${warnings} occured while building this build, and there were ${errors} errors."

标签: javamavenpom.xml

解决方案


Maven 不对日志文件进行任何后处理——它只使用具有一些配置的 SLF4J 日志实现。这意味着 Maven 没有任何与日志文件相关的属性,这些属性会显示某些类型的日志消息的计数。这意味着您必须自己完成该部分,然后将其附加到属性,以便您可以使用属性替换。这使它成为一项相对耗时的任务,而且回报似乎很少。

争论为什么不值得

  1. 警告消息格式取决于各个插件 - 因此,这意味着如果插件开发人员决定为单个警告放置多个警告日志语句,您无法决定是一个警告还是三个警告。如果他们出于某种原因决定将所有警告放在一个日志条目中,情况也是如此。
  2. 计算错误是没有意义的——Maven API 的约定是在插件执行期间一旦遇到无法处理的错误就抛出异常,从而以失败结束构建。
  3. 此问题的解决方案需要处理日志文件 - 这意味着您必须重定向流,并在这样做时限制功能。

好吧,反正我也想要,怎么办?

你只需要:

  1. 将 SLF4J 日志输出重定向到文件(在给出的链接和 SLF4J javadoc 中有说明)
  2. 在 Maven 生命周期结束时,执行日志文件的后处理,计算具有特定日志级别(即 WARN)的消息,并将该数字保存到属性(即警告)
  3. 后处理后写入输出消息,并进行属性替换(即${warnings})

鉴于这一切,我想说仅仅显示警告的数量并不值得。


推荐阅读