Подтвердить что ты не робот

Получить Android gradle плагин и контрольный стиль, работающие вместе/использование командной строки

Я оцениваю способность новой системы сборки на основе gradle воспроизвести наш текущий процесс сборки на основе ant и, как новичок gradle, мне не удалось запустить checkstyle с андроидом gradle плагин.

Окружающая среда:

  • gradle 1.6 работает нормально в стандартном проекте java (включая контрольную цель проверки)

  • обновленный SDK для Android (22.0.1 с инструментами платформы и инструментами построения 17)

  • нет eclipse, нет студии для Android, только мой прекрасный терминал

Симптом:

Целевой проект 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, запущенную как зависимость от компиляции (но давайте сначала запускаем и запускаем chekstyle).

Предположение:

Это может быть связано с тем, что (из [руководства пользователя] [1]):

Плагин Android [...] использует свои собственные sourceSets

но мне недостаточно gradle -эффективности, чтобы понять, чего я там не вижу. Пожалуйста, gradle Мастер, просветите меня своими ценными знаниями!

4b9b3361

Ответ 1

Я нашел, выкапывая в Интернете, что плагин Android зависит от java-базы, а не от java (т.е. управление sourceSets специфично), а плагин checkstyle полагается на java. Как следствие, некоторые модификации вверх по gradle необходимы, чтобы все было сделано. Команда gradle работает над этим, как видно на twitter:

@anzix Наборы исходников Android скоро будут понятны плагинами качества общего кода. Работа над этим уже началась.

— gradle Система сборки (@Gradleware) 26 мая 2013 г.

Ответ 2

Я получил pmd, findbugs и checkstyle, используя Gradle 1.12 плагин android 0.12. + используя следующий script:

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 в командной строке запускает все плагины качества кода и генерирует отчеты xml в приложении/сборке/отчетах/, которые затем готовы к просмотру или анализу с помощью инструментов CI.

Ответ 3

У кого-то есть отличный ответ для решения интеграции PMD, findbugs и checkstyle с Gradle для Android. К сожалению, единственное решение на данный момент основано на ant: http://sethrylan.org/2013/07/14/gradle-android-findbugs.html

Желаю, чтобы Gradle в один прекрасный день позволит делать так же, как maven для Android.

--- Обновление от октября 2013 года

С Gradle 1.8 и Android-плагином для Gradle 0,6. + вам больше не нужно. Android-версии и конфигурации для Android теперь совместимы с java-плагином, и все плагины с качеством работают из коробки.

Это включает pmd, findbugs, checkstyle и classycle.

--- Обновление Конфигурация, в значительной степени вдохновленная упомянутым выше проектом, предлагается в этом проекте с открытым исходным кодом, а также другие инструменты.

Ответ 4

Чтобы заставить это работать с моим Android-проектом, я должен был явно объявить задачу.

Вот что сработало для меня:

apply plugin: 'checkstyle'

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

    // empty classpath
    classpath = files()
}

Помните, что плагин Android может выбрать создание задачи с тем же именем в будущем или работать совместно с плагином checkstyle разными способами.

Ответ 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'

Вы можете использовать конфигурацию hardcore:

check {
    abortOnError true
    checkstyle { config hard() }
    pmd { config hard() }
}

Ответ 7

Взгляните на плагин Soter Gradle, чтобы без проблем добавить поддержку проектов Findbugs, Checkstyle и PMD в Android.