2015-04-30 4 views
8

У меня есть проект андроида. Я хочу представить findbugs в моем проекте как плагин градиента. Я попытался отредактировать проект build.gradle, как показано ниже.Findbugs android gradle plugin

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 чек? Какую команду градации я должен использовать?

+0

Нажмите, чтобы обновить gradle – sukumar

+0

@sukumar На самом деле я хочу, чтобы команда вызывала это, поскольку это делается как часть непрерывной интеграции. Синхронизация - это успех. Нулевые ошибки и нулевые предупреждения. Плагин выглядит хорошо. –

+1

https://androidbycode.wordpress.com/2015/02/13/static-code-analysis-automation-using-findbugs-android-studio/ – sukumar

ответ

16

Просто поместите это в свои модули 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

0

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

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

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

+0

Кордас: плагин, похоже, теперь отлично работает как './gradlew findbugsMain' выполняется. Но я не могу найти какой-либо журнал в указанной папке. –

+0

Вы уверены, что в каталоге 'build/findbugsReports' ничего нет? –

+0

Kordas: каталог 'build/findbugsReport' не генерируется. –

9

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

Эта версия генерирует задачу 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 задачи на различных вариантах, в зависимости от конфигурации.

+0

Это действительно хорошо. –

0

Просьба взглянуть на этот проект https://github.com/Piasy/AndroidCodeQualityConfig.

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