我正在尝试使用适用于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分析配置类?
答案 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"
因此,如果上述任何一个值都无法解决,请尝试在构建树中查找实际的类,也许他们只是再次对其进行了更改。