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

时间:2015-01-21 14:32:51

标签: gradle findbugs

我想编写这样一个gradle任务(使用 Findbugs 插件)如果发现任何 Findbugs 违规但仅在完成分析之后才会失败。如果我执行ignoreFailures=true任务完全失败,如果我将其设为false,则一旦找到第一个问题,任务就会失败。我希望该任务执行完整的分析,并且只有在完成任何违规后才能完成。

2 个答案:

答案 0 :(得分:7)

你是对的,添加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文件 - 然后找不到错误,并且不会抛出任何异常。

答案 1 :(得分:0)

您也可以使用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