FindBugs Android Gradle没有配置类错误

时间:2013-12-11 08:58:46

标签: android gradle findbugs

我正在尝试使用适用于Android版本的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任务时,它说

No classes configured for FindBugs analysis.

如何为FindBugs分析配置类?

6 个答案:

答案 0 :(得分:12)

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

Gradle和Android插件都计划进行工作,以允许使用默认的SourceSets来启用FindBugs。

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

这绝对是可能的。至少现在。 答案可以在底部的https://gist.github.com/rciovati/8461832上看到。

<nav>

这里的重要部分是 dependsOn:assembleDebug 。 如果没有它,您将获得没有为FindBugs分析配置错误消息的类。

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

答案 3 :(得分:2)

我能够解决问题

将find bug添加为单独的任务

 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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

正如其他人所写,您必须设置sourceSets,即:

task findbugs(type: FindBugs) {
    // ignoreFailures = false
    ignoreFailures = true
    effort = 'max'
    reportLevel = 'low'
    excludeFilter = file("quality/findbugs/findbugs-filter.xml")
    classes = files("${project.buildDir}/intermediates/javac/debug/classes",

    source "${file(getProjectDir().getPath()).getAbsolutePath()}/src"
    include '**/*.java'
    exclude "${project.buildDir}/generated/**/*.java"

    reports {
        xml.enabled = true
        xml {
            destination file("findbugs/report.xml")
        }
        /*
        html.enabled = true
        html {
            destination file("findbugs/report.html")
        }
        */
        /*
        text.enabled = true
        text {
            destination file("findbugs/report.txt")
        }
        */
    }

    classpath = files()
}

问题是,当您升级版本的Android Gradle插件时,此路径会不时更改。

在我们的项目中,不同时间的值如下:

"${project.buildDir}/intermediates/classes/debug"
"${project.buildDir}/intermediates/javac/debug/compileDebugJavaWithJavac/classes"
"${project.buildDir}/intermediates/javac/debug/classes"

因此,如果上述任何一个值都无法解决,请尝试在构建树中查找实际的类,也许他们只是再次对其进行了更改。