如何编写自定义的 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 违规但在分析完成后失败的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件自定义 Gradle 任务 ⑪ ( Gradle 任务分组 | 为自定义 Gradle 任务指定分组 | 为自定义 Gradle任务指定任务描述 | 代码示例 )
Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )
Android Gradle 插件自定义 Gradle 任务 ⑤ ( 为自定义 Gradle 任务添加依赖任务 | Gradle 任务依赖执行顺序控制 )