Подтвердить что ты не робот

Использование "исключает" конфигурацию в Findbugs и Checkstyle плагине в Gradle

У меня есть следующий файл сборки Gradle: https://github.com/markuswustenberg/jsense/blob/a796055f984ec309db3cc0f3e8340cbccac36e4e/jsense-protobuf/build.gradle, который включает в себя:

checkstyle {
  // TODO The excludes are not working, ignore failures for now
  //excludes '**/org/jsense/serialize/protobuf/gen/**'
  ignoreFailures = true
  showViolations = false
}

findbugs {
  // TODO The excludes are not working, ignore failures for now
  //excludes '**/org/jsense/serialize/protobuf/gen/**'
  ignoreFailures = true
}

Как вы можете видеть, я пытаюсь исключить автоматически сгенерированный код в пакете org.jsense.serialize.protobuf.gen. Я не могу определить формат строк, заданных параметру исключает, и документация не очень помогает: http://www.gradle.org/docs/1.10/dsl/org.gradle.api.plugins.quality.FindBugs.html#org.gradle.api.plugins.quality.FindBugs:excludes (он просто говорит: "Набор исключить шаблоны." ).

Итак, мой вопрос: как следует исключать строки шаблонов для форматирования плагинов Findbugs и Checkstyle?

Я запускаю Gradle 1.10.

Спасибо!

РЕДАКТИРОВАТЬ 1: я получил Checkstyle, исключая работу со следующим:

tasks.withType(Checkstyle) {
  exclude '**/org/jsense/serialize/protobuf/gen/**'
}

Однако использование точного исключения в плагине Findbugs не работает:

tasks.withType(FindBugs) {
  exclude '**/org/jsense/serialize/protobuf/gen/*'
}

EDIT 2: принятый ответ работает, а также использует XML файл и фильтрует его так:

findbugs {
  excludeFilter = file("$projectDir/config/findbugs/excludeFilter.xml")
}

и

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
  <Match>
    <Package name="org.jsense.serialize.protobuf.gen"/>
  </Match>
</FindBugsFilter>

EDIT 3: это отлично работает, и XML файл не требуется:

def excludePattern = 'org/jsense/serialize/protobuf/gen/'
def excludePatternAntStyle = '**/' + excludePattern + '*'
tasks.withType(FindBugs) {
    classes = classes.filter {
        !it.path.contains(excludePattern)
    }
}
tasks.withType(Checkstyle) {
    exclude excludePatternAntStyle
}
tasks.withType(Pmd) {
    exclude excludePatternAntStyle
}
4b9b3361

Ответ 1

SourceTask#exclude фильтрует исходные файлы. Однако FindBugs в первую очередь работает с файлами классов, которые вам также придется фильтровать. Попробуйте что-то вроде:

tasks.withType(FindBugs) {
    exclude '**/org/jsense/serialize/protobuf/gen/*'
    classes = classes.filter { 
        !it.path.contains(new File("org/jsense/serialize/protobuf/gen/").path) 
    }
}

PS: Возможно, что файлы исходных файлов фильтра не имеют разницы (и, следовательно, не нужны) в случае FindBugs. (Я еще не пробовал.)