2013-12-11 22 views
7

Próbuję użyć wtyczki FindBugs dla Gradle z kompilacją Androida.FindBugs Android Gradle Nie skonfigurowano błędów klas

Plik

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:+' 
} 

build.gradle Ale kiedy wykonać zadanie check mówi

 
No classes configured for FindBugs analysis. 

Jak skonfigurować zajęcia dla analizy FindBugs?

Odpowiedz

12

Nie jest to możliwe w chwili, gdy findbugs oczekuje normalnych Java SourceSets Gradle, ale wtyczka Android używa niestandardowych.

W programie Gradle i wtyczce Android zaplanowano pracę, aby umożliwić używanie domyślnych SourceSets, które umożliwią FindBugs.

śledzić ten problem tutaj: https://code.google.com/p/android/issues/detail?id=55839

2

udało mi się rozwiązać problem

dodając find błąd jako oddzielne zadanie

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

to zadanie można uruchomić za pomocą

gradle findbugs 

Jeśli używasz wtyczki do testowania Androida, musisz wykluczyć Zadanie findbugsTestDebug podczas kompilacji.

gradle build -x findbugsTestDebug 
+1

Zauważ, że działa to dobrze, jeśli nie używasz żadnych innych folderów źródłowych, smaków lub typów kompilacji.Moja odpowiedź poniżej na temat braku integracji dotyczy prawdziwej integracji, która działa bez względu na to, jak konfigurujesz swój projekt na Androida i bez względu na to, gdzie mieszka twój kod (w głównych zestawach źródłowych, w zestawach źródłowych smaku itp.). –

3

W nowszych wersjach Androida Studio problem ten można przypisać fakt, że położenie katalogu classes zmieniło.

Nowa lokalizacja (zgodnie z 0.8.2) jest:

build/intermediates/classes/{build_variant_name}/ 

np

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

Jest to z pewnością możliwe. Przynajmniej teraz. Odpowiedź można znaleźć na dole: https://gist.github.com/rciovati/8461832.

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() 
} 

Ważną częścią tutaj jest dependsOn: assembleDebug. Bez tego otrzymasz Brak skonfigurowanych klas dla komunikatu o błędzie FindBugs.

Odwołaj się do tego https://stackoverflow.com/a/7743935/1159930 dla pliku wykluczeń.

+0

Tęskniłem dependsOn i dostałem ten sam problem, kiedy po raz pierwszy posprzątałem. Dzięki! –

0

Muszę podać domyślny zestaw źródeł dla findbugs. Początkowo to nie było, więc dostałem błąd.

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