2013-12-11 68 views
7

我想爲Android構建使用Gradle的FindBugs插件。FindBugs Android Gradle沒有配置類錯誤

build.gradle文件

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

但是,當我執行任務check它說

 
No classes configured for FindBugs analysis. 

如何配置的FindBugs分析類?

回答

12

這是不可能的,因爲findbugs期望Gradle的普通Java SourceSets,但android插件使用自定義的。

在Gradle和Android插件中都有計劃可以使用默認的SourceSets來啓用FindBugs。

您追蹤這裏這個問題:https://code.google.com/p/android/issues/detail?id=55839

2

我是能夠解決問題

加入發現錯誤作爲單獨的任務

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

此任務可以運行使用

gradle findbugs 

如果你正在使用android-test插件,你必須排除建立時findbugsTestDebug任務。

gradle build -x findbugsTestDebug 
+1

請注意,如果您不使用任何其他源文件夾,風味或構建類型,則此功能正常工作。以下關於缺乏集成的答案是關於一個真正的集成,無論您如何配置Android項目,無論您的代碼在哪裏(主要源代碼集,風格源代碼集等等),都可以工作 –

3

在Android Studio中的較新版本的這個問題可以歸因於一個事實,即classes目錄的位置發生了變化。

新位置(如的0.8.2)是:

build/intermediates/classes/{build_variant_name}/ 

例如

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

這是絕對可行的。至少現在。 答案可以在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() 
} 

這裏最重要的部分是dependsOn:assembleDebug。 如果沒有,您將得到一個沒有爲FindBugs分析配置的類錯誤消息。

有關排除文件,請參閱此https://stackoverflow.com/a/7743935/1159930

+0

我錯過了dependsOn並在第一次清洗時得到同樣的問題。謝謝! –

0

我必須指定findbugs的默認sourceSet。最初它不在那裏,所以我得到了錯誤。

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