Как написать настраиваемую задачу Gradle, чтобы не игнорировать нарушения Findbugs, но не завершиться после завершения анализа

Я хочу написать такую ​​сложную задачу (с использованием плагина Findbugs), которая не выполняется, если обнаружены какие- либо нарушения Findbugs, но только после завершения анализа. Если я сделаю ignoreFailures=true задача не будет завершена с ошибкой, и если я сделаю ее ложной, задача не выполнится, как только будет найдена первая проблема. Я хочу, чтобы задача выполнила полный анализ и провалилась только после того, как она будет выполнена, если будут обнаружены какие-либо нарушения.

2 ответа

Решение

Вы правы, добавляя 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

Здесь можно найти полный и рабочий пример. Чтобы увидеть, работает ли он, удалите 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
Другие вопросы по тегам