2013-12-11 12 views
7

Ich versuche, das FindBugs Plugin für Gradle mit einem Android Build zu verwenden.FindBugs Android Gradle Keine Klassen konfiguriert Fehler

Die build.gradle Datei

buildscript { 
    repositories { 
    mavenCentral()   
    } 
    dependencies { 
    classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android' 
apply plugin: 'findbugs' 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 
    defaultConfig { 
    minSdkVersion 8 
    targetSdkVersion 19   
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
} 

Aber wenn ich die check Aufgabe ausführen sagt es

 
No classes configured for FindBugs analysis. 

Wie kann ich Klassen für FindBugs Analyse konfigurieren?

Antwort

12

Dies ist im Moment nicht möglich, da Findbugs normale Java SourceSets von Gradle erwarten, aber das Android-Plugin verwendet benutzerdefinierte.

In Gradle und im Android-Plugin ist geplant, die Standard-SourceSets zu verwenden, die FindBugs aktivieren.

Sie dieses Problem hier aufspüren: https://code.google.com/p/android/issues/detail?id=55839

2

Ich war in der Lage, das Problem

durch Zugabe finden Fehler als separate Aufgabe kann

task findbugs(type: FindBugs) { 
    ignoreFailures = true 
    classes = fileTree('build/classes/debug/') 
    source = fileTree('src/main/java/') 
    classpath = files() 
    effort = 'max' 
} 

diese Aufgabe zu lösen, laufen mit

gradle findbugs 

Wenn Sie Android-Test-Plugin verwenden, müssen Sie ausschließen findbugsTestDebug-Task beim Erstellen.

gradle build -x findbugsTestDebug 
+1

Beachten Sie, dass dies funktioniert, wenn Sie keine anderen Quellordner, Aromen oder Buildtypen verwenden.Meine Antwort unten auf den Mangel an Integration ist über eine echte Integration, die funktioniert, egal wie Sie Ihr Android-Projekt konfigurieren und egal, wo der Code lebt (in den Hauptquellgruppen, in den Aroma-Sourcesets, etc ...) –

3

In neueren Versionen von Android Studio könnte dieses Problem auf die Tatsache zurückzuführen, dass die Lage des classes Verzeichnisses geändert hat.

Der neue Standort (ab 0.8.2) ist:

build/intermediates/classes/{build_variant_name}/ 

zum Beispiel

build/intermediates/classes/debug/ 
task findbugs(type: FindBugs) { 
    excludeFilter = file('config/findbugs/findbugs.xml') 
    ignoreFailures = true 
    classes = fileTree('build/intermediates/classes/preproduction/') 
    source = fileTree('src/main/java/') 
    classpath = files() 
    effort = 'max' 
    reports { 
     xml { 
      destination "reports/findbugs.xml" 
     } 
    } 
} 
4

Dies ist definitiv möglich ist. Zumindest jetzt. Die Antwort kann auf https://gist.github.com/rciovati/8461832 an der Unterseite gesehen werden.

apply plugin: 'findbugs' 

// android configuration 

findbugs { 
    sourceSets = [] 
    ignoreFailures = true 
} 

task findbugs(type: FindBugs, dependsOn: assembleDebug) { 

    description 'Run findbugs' 
    group 'verification' 

    classes = fileTree('build/intermediates/classes/debug/') 
    source = fileTree('src/main/java') 
    classpath = files() 

    effort = 'max' 

    excludeFilter = file("../config/findbugs/exclude.xml") 

    reports { 
     xml.enabled = true 
     html.enabled = false 
    } 
} 

check.doLast { 
    project.tasks.getByName("findbugs").execute() 
} 

Der wichtige Teil hier ist DependsOn: assembleDebug. Ohne diese erhalten Sie eine Keine Klassen für FindBugs Analyse Fehlermeldung konfiguriert.

Die Ausschlussdatei finden Sie unter https://stackoverflow.com/a/7743935/1159930.

+0

verpasste ich dependsOn und bekam das gleiche Problem, als ich zuerst gereinigt habe. Vielen Dank! –

0

Ich muss das Standard-SourceSet für Findbugs angeben. Anfangs war es nicht da, also bekam ich den Fehler.

findbugs { 
    sourceSets = [] //Default sourceSet 
    toolVersion = "3.0.1"  
    ignoreFailures = true  
    reportsDir = file("$project.buildDir/findbugsReports") 
    effort = "max" 
    reportLevel = "low" 
} 
Verwandte Themen