获取Android gradle插件和checkstyle协同工作/命令行用法

Ren*_*aud 24 android checkstyle gradle

我正在评估新的基于gradle的构建系统重现我们当前基于ant的构建过程的能力,并且作为一个初学者,我没有使用android gradle插件运行checkstyle.

环境:

  • gradle 1.6在标准java项目上正常运行(包括checkstyle检查目标)

  • 最新的Android SDK(带平台工具和构建工具的22.0.1)

  • 没有日食,没有安卓工作室,只有我可爱的终端

症状:

目标项目是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'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后gradle check甚至没有抱怨找不到checkstyle.xml文件(在默认config/checkstyle位置)并返回:

:check UP-TO-DATE

BUILD SUCCESSFUL
Run Code Online (Sandbox Code Playgroud)

需要什么:

首先,我只需要一个运行的checkstyle目标.然后,我需要将checkstyle运行自动化作为编译的依赖项(但是让我们首先启动并运行chekstyle目标).

假设:

这可能与(来自[用户指南] [1])的事实有关:

Android插件[...]使用自己的sourceSets

但是,我不足以理解我在那里缺少的东西.请高手掌握,用你宝贵的知识启发我!

Mar*_* RS 28

我得到pmd,findbugs和checkstyle使用Gradle 1.12 android插件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
    }
}
Run Code Online (Sandbox Code Playgroud)

运行gradle build在命令行中运行的所有代码质量的插件和生成XML报告应用程序/建设/报告/然后将它们准备好由CI工具来查看和解析.

  • 我花时间更新了repo和脚本,以反映Android插件0.12.+中所做的更改.在我公司,生成报告后,我们使用Jenkins插件显示每个报告的图表. (2认同)
  • 默认情况下,Gradle 2+附带的PMD插件在`pmd`任务中需要稍微不同的`ruleSets`数组:`ruleSets = ["java-basic","java-braces","java-strings"] ` (2认同)

Sni*_*las 7

有人解决了使用Gradle for Android集成PMD,findbugs和checkstyle的好方法.不幸的是,目前唯一的解决方案是基于ant:http: //sethrylan.org/2013/07/14/gradle-android-findbugs.html

我希望gradle有一天能够像Android一样多做maven.

---自2013年10月起更新

使用Gradle 1.6.+ Gradle 1.6.+的Android插件,你不再需要它了.Android源码集和配置现在与java插件兼容,所有质量插件都可以开箱即用.

这包括pmd,findbugs,checkstyle和classycle.

---更新在这个开源项目中,还提出了一个很大程度上受上述项目启发的配置,以及其他工具.


小智 5

为了使这与我的Android项目一起使用,我必须明确声明任务.

这对我有用:

apply plugin: 'checkstyle'

task checkstyle(type: Checkstyle) {
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    // empty classpath
    classpath = files()
}
Run Code Online (Sandbox Code Playgroud)

请注意,Android插件可能会选择在将来创建同名的任务,或者以不同的方式与checkstyle插件一起使用.


ste*_*nsk 5

您可以尝试Android Check插件(https://github.com/noveogroup/android-check):

  • Checkstyle的
  • PMD

组态:

buildscript {
    repositories { jcenter() }
    dependencies {
        ...
        classpath 'com.noveogroup.android:check:+'
        ...
    }
}

apply plugin: 'com.noveogroup.android.check'
Run Code Online (Sandbox Code Playgroud)

您可以使用硬核配置:

check {
    abortOnError true
    checkstyle { config hard() }
    pmd { config hard() }
}
Run Code Online (Sandbox Code Playgroud)


Ren*_*aud 3

我通过网上挖掘发现Android插件依赖于java-base而不是java(即sourceSets管理是特定的)而checkstyle插件依赖于java。因此,需要对 gradle 上游进行一些修改才能完成任务。gradle 团队正在努力解决这个问题,如 Twitter 上所示:

@anzix Android 源集很快就会被通用代码质量插件所理解。这方面的工作已经开始。

— Gradle 构建系统 (@Gradleware) 2013 年 5 月 26 日