如何编写自定义 gradle 任务以不忽略 Findbugs 违规但在分析完成后失败

How to write a customized gradle task to not to ignore Findbugs violations but fail after the analysis is completed

我想写这样一个 gradle 任务(使用 Findbugs 插件)如果有任何 Findbugs 违规发现 ,但仅在完成分析后发现 。如果我这样做 ignoreFailures=true 任务根本不会失败,如果我将其设为 false 则任务会在发现第一个问题后立即失败。我希望任务执行完整的分析,只有在发现任何违规行为后才失败。

你说得对,添加 ignoreFailures=true 将防止任务失败。因此,应该使用这个选项,如果发现错误,应该稍后检查它。

这个脚本可以完成工作:

apply plugin: 'java'
apply plugin: 'findbugs'

repositories {
   mavenCentral()
}

findbugs {
   ignoreFailures = true
}

task checkFindBugsReport << {
   def xmlReport = findbugsMain.reports.xml
   def slurped = new XmlSlurper().parse(xmlReport.destination)
   def bugsFound = slurped.BugInstance.size()
   if (bugsFound > 0) {
      throw new GradleException("$bugsFound FindBugs rule violations were found. See the report at: $xmlReport.destination")
   }
}

findbugsMain.finalizedBy checkFindBugsReport

Here 可以找到完整的工作示例。要查看它是否有效,请删除 incorrect.java 文件 - 然后没有发现错误并且 - 没有抛出异常。

您也可以为此使用 Violations Gradle Plugin。然后你还可以运行 checkstyle,或者任何其他分析,在构建失败之前。

task violations(type: se.bjurr.violations.gradle.plugin.ViolationsTask) {
 minSeverity = 'INFO'
 detailLevel = 'VERBOSE' // PER_FILE_COMPACT, COMPACT or VERBOSE
 maxViolations = 0

 // Many more formats available, see: https://github.com/tomasbjerre/violations-lib
 violations = [
  ["FINDBUGS",   ".", ".*/findbugs/.*\.xml$",   "Findbugs"]
 ]
}

check.finalizedBy violations