我正在评估新的基于gradle的构建系统重现我们当前基于ant的构建过程的能力,并且作为一个初学者,我无法使用android gradle插件运行checkstyle。
环境:
gradle 1.6在标准java项目上运行正常(包括checkstyle检查目标)
最新的Android SDK(22.0.1,包含平台工具和构建工具17)
没有日食,没有安卓工作室,只有我可爱的终端
症状:
目标项目是https://github.com/nibua-r/LigoTextDemo,我成功使用gradle构建它,但如果我天真地将apply plugin: checkstyle
添加到我的build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
apply plugin: 'checkstyle'
android {
buildToolsVersion '17'
compileSdkVersion 15
testBuildType 'debug'
defaultConfig {
versionCode = 1
versionName = '1.0'
minSdkVersion 12
targetSdkVersion 15
}
buildTypes {
debug {
packageNameSuffix = '.debug'
}
}
}
然后gradle check
甚至没有抱怨找不到checkstyle.xml
文件(在默认的config/checkstyle
位置)并返回:
:check UP-TO-DATE
BUILD SUCCESSFUL
需要什么:
首先,我只需要一个正在运行的checkstyle目标。然后,我需要将checkstyle运行自动化作为编译的依赖项(但是让我们先启动并运行chekstyle目标)。
假设:
这可能与(来自[用户指南] [1]):
的事实有关Android插件[...]使用自己的sourceSets
但是我并不足以理解我在那里缺少的东西。请大师,请用你宝贵的知识启发我!
答案 0 :(得分:28)
我得到了pmd,findbugs和checkstyle使用Gradle 1.12安卓插件0.12。+使用以下脚本:
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
apply plugin: 'pmd'
check.dependsOn 'checkstyle', 'findbugs', 'pmd'
task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/config/quality/checkstyle/checkstyle.xml")
source 'src'
include '**/*.java'
exclude '**/gen/**'
classpath = files()
}
task findbugs(type: FindBugs) {
ignoreFailures = true
effort = "max"
reportLevel = "high"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")
classes = files("$project.buildDir/intermediates/classes/")
source 'src'
include '**/*.java'
exclude '**/gen/**'
reports {
xml {
destination "$project.buildDir/reports/findbugs/findbugs.xml"
xml.withMessages true
}
}
classpath = files()
}
task pmd(type: Pmd) {
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ignoreFailures = true
ruleSets = ["basic", "braces", "strings"]
source 'src'
include '**/*.java'
exclude '**/gen/**'
reports {
xml.enabled = true
html.enabled = false
}
}
在命令行中运行gradle build
将运行所有代码质量插件,并在 app / build / reports / 中生成xml报告,然后CI工具可以查看或解析这些报告。
答案 1 :(得分:7)
有人可以通过Gradle for Android解决PMD,findbugs和checkstyle的集成问题。 不幸的是,现在唯一的解决方案是基于ant: http://sethrylan.org/2013/07/14/gradle-android-findbugs.html
我希望gradle有一天能够像Android一样做maven。
---截至2013年10月更新
使用适用于Gradle 0.6。+的Gradle 1.8和Android插件,您不再需要它了。 Android源码集和配置现在与java插件兼容,所有质量插件都可以直接使用。
这包括pmd,findbugs,checkstyle和classycle。
---更新 在this open source project中还提出了一个主要受上述项目启发的配置,以及其他工具。
答案 2 :(得分:5)
为了使这与我的Android项目一起使用,我必须明确声明任务。
这对我有用:
apply plugin: 'checkstyle'
task checkstyle(type: Checkstyle) {
source 'src'
include '**/*.java'
exclude '**/gen/**'
// empty classpath
classpath = files()
}
请注意,Android插件可能会选择在将来创建同名的任务,或者以不同的方式与checkstyle插件一起使用。
答案 3 :(得分:5)
您可以尝试Android Check插件(https://github.com/noveogroup/android-check):
配置:
buildscript {
repositories { jcenter() }
dependencies {
...
classpath 'com.noveogroup.android:check:+'
...
}
}
apply plugin: 'com.noveogroup.android.check'
您可以使用硬核配置:
check {
abortOnError true
checkstyle { config hard() }
pmd { config hard() }
}
答案 4 :(得分:4)
CheckStyle for Android:
博客: http://sethrylan.org/2013/07/14/gradle-android-findbugs.html
代码: https://gist.github.com/sethrylan/6002657#file-findbugs-gradle
答案 5 :(得分:3)
我通过在网上挖掘发现Android插件依赖于java-base而不是java(即sourceSets管理是特定的),checkstyle插件依赖于java。因此,需要一些gradle上游修改才能完成任务。 gradle团队正在研究这个问题,如推特上所见:
@anzix Android源代码集很快就会被通用代码质量插件所理解。已经开始的工作已经开始。
- Gradle Build System(@ Gradleware)May 26, 2013答案 6 :(得分:1)
查看Soter Gradle插件,以便为Android项目无缝添加对Findbugs,Checkstyle和PMD的支持。