FindBugs Android Gradle无类配置错误
我正在尝试使用Android版本的Gradle FindBugs插件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 {
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"