Как написать настраиваемую задачу 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