Получить 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 Мастер, просветите меня своими ценными знаниями!
Ответы
Ответ 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):
Конфигурация:
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() }
}
Ответ 6
CheckStyle для Android:
- CheckStyle.
- PMD.
- FindBugs.
Блог:
http://sethrylan.org/2013/07/14/gradle-android-findbugs.html
код:
https://gist.github.com/sethrylan/6002657#file-findbugs-gradle
Ответ 7
Взгляните на плагин Soter Gradle, чтобы без проблем добавить поддержку проектов Findbugs, Checkstyle и PMD в Android.