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

Posted

技术标签:

【中文标题】如何编写自定义的 gradle 任务以不忽略 Findbugs 违规但在分析完成后失败【英文标题】:How to write a customized gradle task to not to ignore Findbugs violations but fail after the analysis is completed 【发布时间】:2015-03-20 02:52:19 【问题描述】:

我想编写这样一个 gradle 任务(使用 Findbugs 插件),如果发现任何 Findbugs 违规,该任务就会失败但只有在完成分析后强>。如果我做ignoreFailures=true,任务根本不会失败,如果我把它设为假,一旦发现第一个问题,任务就会失败。我希望任务执行完整的分析,并且只有在完成后发现任何违规行为才会失败。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何编写自定义的 gradle 任务以不忽略 Findbugs 违规但在分析完成后失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在 build.gradle 中定义和调用自定义方法

Android Gradle 插件自定义 Gradle 任务 ⑪ ( Gradle 任务分组 | 为自定义 Gradle 任务指定分组 | 为自定义 Gradle任务指定任务描述 | 代码示例 )

如何自定义模板以不包含某些类型[重复]

Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )

Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )

制作自定义Gradle任务,生成代码,在IDE导入上运行