如何为安卓系统设置SpotBugs?
我试着跟随正式文件和gradle插件,但是安卓的设置是不完整和令人困惑的,没有起作用。
我尝试了下面的设置。
build.gradle (项目):
buildscript {
repositories {
// ...
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
// ...
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.4"
}
}build.gradle (app):
//...
apply plugin: "com.github.spotbugs"
android {
// ...
sourceSets {
main {
java.srcDirs = ['src/main/java']
}
}
}
// ...
spotbugs {
toolVersion = "3.1.3"
ignoreFailures = true
reportsDir = file("$project.buildDir/findbugsReports")
effort = "max"
reportLevel = "high"
}
tasks.withType(com.github.spotbugs.SpotBugsTask) {
// What do I need to do here?
}我试着用./gradlew spotbugsMain运行它,但是缺少gradle任务。
我应该手动添加任务吗?我该怎么做?
你能给我举一个Android项目最小工作设置的例子吗?
发布于 2018-10-09 10:32:53
我做了一些测试,我设法让它像这样工作:
1)将sourceSets声明移出android块。让它空置,这只是为spotbugsMain的任务生成,它不会影响到全球安卓系统的建设。
android {
// ...
}
sourceSets {
main {
java.srcDirs = []
}
}2)保留spotbugs块并配置如下SpotBugsTask任务:
tasks.withType(com.github.spotbugs.SpotBugsTask) {
classes = files("$projectDir.absolutePath/build/intermediates/classes/debug")
source = fileTree('src/main/java')
}它将在app/build/findbugsReports中生成报告
重要:
它只适用于./gradlew build命令,./gradlew spotbugsMain不能工作,因为必须在此之前构建项目
您可以修复添加一个assemble依赖项:
tasks.withType(com.github.spotbugs.SpotBugsTask) {
dependsOn 'assemble'
classes = files("$projectDir.absolutePath/build/intermediates/classes/debug")
source = fileTree('src/main/java')
}发布于 2019-06-05 20:47:14
以下是ToYonos答案(2018年10月9日);将此用于AndroidStudio3.4及以上版本:
项目/build.gradle
buildscript {
repositories {
google()
jcenter()
maven {
url 'https:// maven url 1'
}
maven {
url "https://plugins.gradle.org/m2/" // Add this, for SpotBugs
}
}
dependencies {
classpath '...'
// If you're using gradle 6.x, add this to use SpotBugs app version 4.0.2
classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.3.0"
// If you're using gradle 4.x or 5.x, add this to use SpotBugs app version 3.1.2
classpath "com.github.spotbugs:spotbugs-gradle-plugin:2.0.1"
}
}项目/应用程序/build.gradle
apply plugin: 'com.android.application'
apply plugin: '...'
apply plugin: "com.github.spotbugs" // <- Add this
dependencies {
...
}
// This block is only needed for gradle 4/5 only.
// It's for SpotBugs to create a 'spotbugsMain' gradle task.
sourceSets {
main {
java.srcDirs = []
}
}
spotbugs {
ignoreFailures = true
reportsDir = file("$project.buildDir/SpotBugsReports")
effort = "max"
reportLevel = "high"
}
// Note: gradle 4/5 should use "com.github.spotbugs.SpotBugsTask"
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
dependsOn 'assembleDebug'
classes = files("$project.buildDir/intermediates/javac") // Important to use this path
excludeFilter = file("$project/spot-bugs-exclude.xml") // Optional - Explained below
source = fileTree('src/main/java') // Only needed on gradle 4/5
reports {
// Enable HTML report only
html.enabled = true
xml.enabled = false
}
}可以通过运行gradle任务为调试生成生成报告:
第6级:
./gradlew spotbugsDebug用于第5级或第4级:./gradlew spotbugsMain
使用classes = files("$project.buildDir/intermediates/javac")很重要,否则您将得到一个错误"java.io.IOException: No files to analyze could be opened" --参见Findbug在"java.io.IOException:无法打开要分析的文件“中失败
您还需要启用HTML报告并禁用XML报告,以查看可读的格式。
ignoreFailures = true是可选的。当SpotBugs检测到代码警告时,默认情况下它将以"BUILD FAILED" +报表文件结尾。设置ignoreFailures = true意味着分级任务将以"BUILD SUCCESSFUL" +一个报表文件结束。
若要从分析中排除某些生成的类,请设置一个excludeFilter。对于示例排除文件,请检查这里或这里(与findbug相同)。
更多信息和教程在这里:https://mikedemaso.com/tech/2020-06-10-spotbugs-gradle-plugin-android/
https://stackoverflow.com/questions/52643805
复制相似问题