Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FindBugs Android Gradle无类配置错误_Android_Gradle_Findbugs - Fatal编程技术网

FindBugs Android Gradle无类配置错误

FindBugs Android Gradle无类配置错误,android,gradle,findbugs,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 {

我正在尝试使用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分析配置类。
如何为FindBugs分析配置类?

这目前不可能,因为FindBugs需要Gradle的普通Java源集,但android插件使用自定义源集

Gradle和Android插件中都计划了使用默认源集来启用FindBugs的工作


您可以在此处跟踪此问题:

我能够解决此问题

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

 task findbugs(type: FindBugs) {
    ignoreFailures = true
    classes = fileTree('build/classes/debug/')
    source = fileTree('src/main/java/')
    classpath = files()
   effort = 'max'
 }
此任务可以使用

gradle findbugs
如果您使用的是android测试插件,则在构建时必须排除findbugsTestDebug任务

gradle build -x  findbugsTestDebug

在较新版本的Android Studio中,这个问题可能是由于
目录的位置发生了更改

新位置(从0.8.2开始)为:

比如说

build/intermediates/classes/debug/
任务findbugs(类型:findbugs){
excludeFilter=file('config/findbugs/findbugs.xml')
ignoreFailures=true
classes=fileTree('build/intermediates/classes/preproduction/'))
source=fileTree('src/main/java/'))
类路径=文件()
努力='max'
报告{
xml{
目标“reports/findbugs.xml”
}
}
}

这绝对是可能的。至少现在是这样。 答案可以在底部看到

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分析配置类的错误消息


有关排除文件,请参阅此文件。

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

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

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

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"

因此,如果上述值都不起作用,请尝试在生成树中查找实际的类,可能它们只是再次更改了它。

请注意,如果不使用任何其他源文件夹、样式或生成类型,则此操作很有效。我下面关于缺乏集成的回答是关于一个真正的集成,无论您如何配置您的android项目,也不管您的代码位于何处(在主源代码集中,在flavor源代码集中,等等…),我都忽略了dependsOn,在我第一次清理时也遇到了同样的问题。谢谢
"${project.buildDir}/intermediates/classes/debug"
"${project.buildDir}/intermediates/javac/debug/compileDebugJavaWithJavac/classes"
"${project.buildDir}/intermediates/javac/debug/classes"