java - 添加遇到的警告数量作为 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."
解决方案
Maven 不对日志文件进行任何后处理——它只使用具有一些配置的 SLF4J 日志实现。这意味着 Maven 没有任何与日志文件相关的属性,这些属性会显示某些类型的日志消息的计数。这意味着您必须自己完成该部分,然后将其附加到属性,以便您可以使用属性替换。这使它成为一项相对耗时的任务,而且回报似乎很少。
争论为什么不值得
- 警告消息格式取决于各个插件 - 因此,这意味着如果插件开发人员决定为单个警告放置多个警告日志语句,您无法决定是一个警告还是三个警告。如果他们出于某种原因决定将所有警告放在一个日志条目中,情况也是如此。
- 计算错误是没有意义的——Maven API 的约定是在插件执行期间一旦遇到无法处理的错误就抛出异常,从而以失败结束构建。
- 此问题的解决方案需要处理日志文件 - 这意味着您必须重定向流,并在这样做时限制功能。
好吧,反正我也想要,怎么办?
你只需要:
- 将 SLF4J 日志输出重定向到文件(在给出的链接和 SLF4J javadoc 中有说明)
- 在 Maven 生命周期结束时,执行日志文件的后处理,计算具有特定日志级别(即 WARN)的消息,并将该数字保存到属性(即警告)
- 后处理后写入输出消息,并进行属性替换(即${warnings})
鉴于这一切,我想说仅仅显示警告的数量并不值得。
推荐阅读
- regex - 为什么我的 RegEx 在 Bash 中总是返回“真”?
- angular - Angular 8,当我在另一个路由器插座中时如何使用主插座路由
- database - 如何在 Windows 10 上安装 SAP HANA 数据库服务器?
- wordpress - 将 get_results 添加到 WordPress REST API
- c# - 在 Windows 服务器上从 C# 运行 Powershell 脚本
- angular - 如何以角度有条件地触发验证检查
- java - 模棱两可的方法调用 println char 数组和 String(而不是 Object)
- excel - 日期从周数和工作日名称
- css - Canvas (Chart.js) 在 Chrome 上正确调整大小,而在 Safari 上它甚至不显示
- roku - Roku 中的全局数组访问