FindBugs Android Gradle没有configuration类错误

我正在尝试为Android构build使用Gradle的FindBugs插件。

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任务它说

没有为FindBugs分析configuration类。

如何为FindBugs分析configuration类?

Solutions Collecting From Web of "FindBugs Android Gradle没有configuration类错误"

目前这是不可能的,因为findbugs期望Gradle的普通Java SourceSets,但android插件使用自定义的。

在Gradle和Android插件中都有计划可以使用默认的SourceSets来启用FindBugs。

您可以在这里跟踪此问题: https : //code.google.com/p/android/issues/detail?id = 55839

这绝对是可能的。 至less现在。 答案可以在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 。 没有这个,你会得到一个没有configurationFindBugs分析错误信息的类。

有关排除文件,请参阅此https://stackoverflow.com/a/7743935/1159930

在较新版本的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" } } } 

我能解决这个问题

通过添加查找错误作为单独的任务

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

这个任务可以运行使用

 gradle findbugs 

如果您正在使用android-test插件,则必须在构build时排除findbugsTestDebug任务。

 gradle build -x findbugsTestDebug 

我必须指定findbugs的默认sourceSet。 最初它不在那里,所以我得到了错误。

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