В FindBugs плагин Gradle в Андроид

у меня есть проект Android. Я хочу представить findbugs в моем проекте как плагин gradle. Я попытался отредактировать проект build.gradle Как ниже.

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
           }
dependencies {
    classpath 'com.android.tools.build:gradle:1.0.0+'
    classpath 'io.fabric.tools:gradle:1.+'

    }
}

apply plugin: "java"
apply plugin: "findbugs"
findbugs {
  toolVersion = "2.0.1"
  sourceSets = [sourceSets.main]
  ignoreFailures = false
  reportsDir = file("$project.buildDir/findbugsReports")
  effort = "max"
  reportLevel = "high"
  includeFilter =     file("$rootProject.projectDir/config/findbugs/includeFilter.xml")
  excludeFilter = file("$rootProject.projectDir/config/findbugs/excludeFilter.xml")
 }

этот плагин правильный? Нужно ли что-то добавлять или удалять? Теперь что я должен сделать, чтобы получить результаты этого findbugs проверить? Какую команду gradle я должен использовать?

4 ответов


просто поместите это в ваш модули build.gradle.

apply plugin: 'findbugs'

task customFindbugs(type: FindBugs) {
    ignoreFailures = false
    effort = "max"
    reportLevel = "low"
    classes = files("$project.buildDir/intermediates/classes")

    // Use this only if you want exclude some errors
    excludeFilter = file("$rootProject.rootDir/config/findbugs/exclude.xml")

    source = fileTree('src/main/java/')
    classpath = files()

    reports {
        xml.enabled = false
        xml.withMessages = true
        html.enabled = !xml.isEnabled()
        xml.destination "$project.buildDir/outputs/findbugs/findbugs-output.xml"
        html.destination "$project.buildDir/outputs/findbugs/findbugs-output.html"
    }
}

build.dependsOn customFindbugs

затем после изменения каталога на путь проекта из командной строки используйте

./gradlew build

отчет об ошибке будет в $project.buildDir/outputs/findbugs/findbugs-output.html


Я немного изменил ответ Невина Раджа Виктора.

эта версия генерирует задачу findbug для каждого варианта сборки и (что более важно) правильно создает зависимости от их соответствующих задач компиляции. Действительно, findbugs требует компиляции кода перед его анализом.

// findbug tasks for each variant
apply plugin: 'findbugs'

android.applicationVariants.all { variant ->
    task("findbugs${variant.name.capitalize()}", type: FindBugs) {
        description "Analyze ${variant.name} code with the findbugs tool"
        group "Verification"

        ignoreFailures = true
        effort = "default"
        reportLevel = "medium"

        classes = files("$project.buildDir/intermediates/classes/${variant.dirName}")
        excludeFilter = file("$rootProject.rootDir/findbugs/findbugs-filter.xml")
        source = variant.javaCompile.source
        classpath = variant.javaCompile.classpath

        reports {
            // Only one of HTML or XML can be turned on at the same time
            html.enabled = true
            xml.enabled = !html.enabled
            xml.withMessages = true

            html.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.html"
            xml.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.xml"
        }

        dependsOn "compile${variant.name.capitalize()}JavaWithJavac"
    }
}

после этого вы можете запустить

./gradlew findbugsDebug
./gradlew findbugsRelease

или другие задачи findbugs на различных вариантах, в зависимости от вашей конфигурации.


пожалуйста, взгляните на этот проект https://github.com/Piasy/AndroidCodeQualityConfig.

этот проект, включая Линт, pmd, findbugs, checkstyle, покрытие кода jacoco.И проект поддержки с подмодулями.


Я вижу некоторые проблемы с конфигурацией:

  • вместо 2.0.1 версия использовать последний 3.0.1
  • set reportLevel to low вместо high сообщить обо всех нарушениях
  • для первого анализа вам не нужно настраивать какие-либо includeFilter или excludeFilter - это только белый и черные списки проверок, если вам нужна настройка

для запуска анализа просто вызовите gradle findbugsMain. Результаты должны быть видны в выход.