Findbugs android gradle 插件
Findbugs android gradle plugin
我有一个 android 项目。我想在我的项目中引入 findbugs
作为 gradle 插件。我尝试如下编辑项目的 build.gradle
。
buildscript {
repositories {
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0+'
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: "java"
apply plugin: "findbugs"
findbugs {
toolVersion = "2.0.1"
sourceSets = [sourceSets.main]
ignoreFailures = false
reportsDir = file("$project.buildDir/findbugsReports")
effort = "max"
reportLevel = "high"
includeFilter = file("$rootProject.projectDir/config/findbugs/includeFilter.xml")
excludeFilter = file("$rootProject.projectDir/config/findbugs/excludeFilter.xml")
}
这个插件正确吗?
是否需要添加或删除任何内容?
现在我应该怎么做才能得到这个 findbugs
检查的结果?
我应该使用什么 gradle 命令?
我发现您的配置存在一些问题:
- 而不是
2.0.1
版本使用最新的 3.0.1
- 将
reportLevel
设置为 low
而不是 high
以报告所有违规行为
- 对于第一次分析,您不需要配置任何
includeFilter
或 excludeFilter
- 如果您需要一些自定义,这些只是检查的白名单和黑名单
要运行 分析只需调用gradle findbugsMain
。结果应该在输出中可见。
只需将其放入您的模块中即可 build.gradle
。
apply plugin: 'findbugs'
task customFindbugs(type: FindBugs) {
ignoreFailures = false
effort = "max"
reportLevel = "low"
classes = files("$project.buildDir/intermediates/classes")
// Use this only if you want exclude some errors
excludeFilter = file("$rootProject.rootDir/config/findbugs/exclude.xml")
source = fileTree('src/main/java/')
classpath = files()
reports {
xml.enabled = false
xml.withMessages = true
html.enabled = !xml.isEnabled()
xml.destination "$project.buildDir/outputs/findbugs/findbugs-output.xml"
html.destination "$project.buildDir/outputs/findbugs/findbugs-output.html"
}
}
build.dependsOn customFindbugs
然后从命令行将目录更改为您的项目路径后,使用
./gradlew build
错误报告将在$project.buildDir/outputs/findbugs/findbugs-output.html
我稍微修改了 Nevin Raj Victor 的回答。
此版本为每个构建变体生成一个 findbug 任务,并且(更重要的是)它正确地创建了对各自编译任务的依赖关系。事实上,findbugs 需要先编译代码,然后才能对其进行分析。
// findbug tasks for each variant
apply plugin: 'findbugs'
android.applicationVariants.all { variant ->
task("findbugs${variant.name.capitalize()}", type: FindBugs) {
description "Analyze ${variant.name} code with the findbugs tool"
group "Verification"
ignoreFailures = true
effort = "default"
reportLevel = "medium"
classes = files("$project.buildDir/intermediates/classes/${variant.dirName}")
excludeFilter = file("$rootProject.rootDir/findbugs/findbugs-filter.xml")
source = variant.javaCompile.source
classpath = variant.javaCompile.classpath
reports {
// Only one of HTML or XML can be turned on at the same time
html.enabled = true
xml.enabled = !html.enabled
xml.withMessages = true
html.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.html"
xml.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.xml"
}
dependsOn "compile${variant.name.capitalize()}JavaWithJavac"
}
}
在此之后,您可以运行
./gradlew findbugsDebug
./gradlew findbugsRelease
或其他针对不同变体的 findbugs 任务,具体取决于您的配置。
请看一下这个项目https://github.com/Piasy/AndroidCodeQualityConfig。
这个项目包括 lint、pmd、findbugs、checkstyle、jacoco code coverage.And 支持带有子模块的项目。
我有一个 android 项目。我想在我的项目中引入 findbugs
作为 gradle 插件。我尝试如下编辑项目的 build.gradle
。
buildscript {
repositories {
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0+'
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: "java"
apply plugin: "findbugs"
findbugs {
toolVersion = "2.0.1"
sourceSets = [sourceSets.main]
ignoreFailures = false
reportsDir = file("$project.buildDir/findbugsReports")
effort = "max"
reportLevel = "high"
includeFilter = file("$rootProject.projectDir/config/findbugs/includeFilter.xml")
excludeFilter = file("$rootProject.projectDir/config/findbugs/excludeFilter.xml")
}
这个插件正确吗?
是否需要添加或删除任何内容?
现在我应该怎么做才能得到这个 findbugs
检查的结果?
我应该使用什么 gradle 命令?
我发现您的配置存在一些问题:
- 而不是
2.0.1
版本使用最新的3.0.1
- 将
reportLevel
设置为low
而不是high
以报告所有违规行为 - 对于第一次分析,您不需要配置任何
includeFilter
或excludeFilter
- 如果您需要一些自定义,这些只是检查的白名单和黑名单
要运行 分析只需调用gradle findbugsMain
。结果应该在输出中可见。
只需将其放入您的模块中即可 build.gradle
。
apply plugin: 'findbugs'
task customFindbugs(type: FindBugs) {
ignoreFailures = false
effort = "max"
reportLevel = "low"
classes = files("$project.buildDir/intermediates/classes")
// Use this only if you want exclude some errors
excludeFilter = file("$rootProject.rootDir/config/findbugs/exclude.xml")
source = fileTree('src/main/java/')
classpath = files()
reports {
xml.enabled = false
xml.withMessages = true
html.enabled = !xml.isEnabled()
xml.destination "$project.buildDir/outputs/findbugs/findbugs-output.xml"
html.destination "$project.buildDir/outputs/findbugs/findbugs-output.html"
}
}
build.dependsOn customFindbugs
然后从命令行将目录更改为您的项目路径后,使用
./gradlew build
错误报告将在$project.buildDir/outputs/findbugs/findbugs-output.html
我稍微修改了 Nevin Raj Victor 的回答。
此版本为每个构建变体生成一个 findbug 任务,并且(更重要的是)它正确地创建了对各自编译任务的依赖关系。事实上,findbugs 需要先编译代码,然后才能对其进行分析。
// findbug tasks for each variant
apply plugin: 'findbugs'
android.applicationVariants.all { variant ->
task("findbugs${variant.name.capitalize()}", type: FindBugs) {
description "Analyze ${variant.name} code with the findbugs tool"
group "Verification"
ignoreFailures = true
effort = "default"
reportLevel = "medium"
classes = files("$project.buildDir/intermediates/classes/${variant.dirName}")
excludeFilter = file("$rootProject.rootDir/findbugs/findbugs-filter.xml")
source = variant.javaCompile.source
classpath = variant.javaCompile.classpath
reports {
// Only one of HTML or XML can be turned on at the same time
html.enabled = true
xml.enabled = !html.enabled
xml.withMessages = true
html.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.html"
xml.destination = "$project.buildDir/outputs/findbugs/findbugs-${variant.name}-output.xml"
}
dependsOn "compile${variant.name.capitalize()}JavaWithJavac"
}
}
在此之后,您可以运行
./gradlew findbugsDebug
./gradlew findbugsRelease
或其他针对不同变体的 findbugs 任务,具体取决于您的配置。
请看一下这个项目https://github.com/Piasy/AndroidCodeQualityConfig。
这个项目包括 lint、pmd、findbugs、checkstyle、jacoco code coverage.And 支持带有子模块的项目。