Применение плагина checkstyle
к проекту gradle для Android по умолчанию ничего не делает (он не добавляет задач checkstyle), потому что:
Обратите внимание, что плагин Android использует собственную реализацию исходного кодаsets.
Плагин Android Gradle;sourceSets {}
Плагин Android имеет собственную концепцию sourceSet
и не заполняет коллекцию sourceSet
плагина java-base
.
Таким образом, применение плагина типа checkstyle
по умолчанию не будет ничего .
https://issuetracker.google.com/issues/36972352#comment21
Но в моем случаеСписок задач, содержащий строку «checkstyle», выглядел так:
$ ./gradlew tasks --all | grep checkstyle
android:checkstyleMain - Run Checkstyle analysis for main classes //<-- this should not be here :)
core:checkstyleMain - Run Checkstyle analysis for main classes
desktop:checkstyleMain - Run Checkstyle analysis for main classes
html:checkstyleMain - Run Checkstyle analysis for main classes
ios:checkstyleMain - Run Checkstyle analysis for main classes
core:checkstyleTest - Run Checkstyle analysis for test classes
desktop:checkstyleTest - Run Checkstyle analysis for test classes
html:checkstyleTest - Run Checkstyle analysis for test classes
ios:checkstyleTest - Run Checkstyle analysis for test classes
Как получилось, что задача android:checkstyleMain
была добавлена в список?
Оказалось, что это было причиной (проект Android)build.gradle
file):
// ...
eclipse {
// ...
sourceSets {
main {
java.srcDirs "src", 'gen'
}
}
// ...
}
// ...
Он установил sourceSets
, который плагин checkstyle
мог обнаружить, но конфигурация была явно неполной, потому что сборка не удалась для задачи: android:checkstyleMain
.
Выше блока eclipse
среди прочего добавлена конфигурация для плагина Eclipse ADT , который уже некоторое время не поддерживается, поэтому я решил удалить этот блок вообще.
$ ./gradlew tasks --all | grep checkstyle
core:checkstyleMain - Run Checkstyle analysis for main classes
desktop:checkstyleMain - Run Checkstyle analysis for main classes
html:checkstyleMain - Run Checkstyle analysis for main classes
ios:checkstyleMain - Run Checkstyle analysis for main classes
core:checkstyleTest - Run Checkstyle analysis for test classes
desktop:checkstyleTest - Run Checkstyle analysis for test classes
html:checkstyleTest - Run Checkstyle analysis for test classes
ios:checkstyleTest - Run Checkstyle analysis for test classes
Успех!Но мне все еще не удалось заставить checkstyle работать с проектом android.
После прочтения многих похожих вопросов о задачах checkstyle, не отображаемых для проектов android ...
... IПридумали решение.
Решение
Root build.gradle
:
// ...
allprojects {
apply plugin: "eclipse"
apply plugin: "idea"
+ apply plugin: "checkstyle"
+ checkstyle {
+ configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
+ }
// ...
}
// ...
Android build.gradle
:
+task checkstyle(type: Checkstyle) {
+ source 'src'
+ include '**/*.java'
+ exclude '**/gen/**'
+ exclude '**/R.java'
+ exclude '**/BuildConfig.java'
+ classpath = files()
+}
+check.dependsOn "checkstyle"
// ...
-// sets up the Android Eclipse project, using the old Ant based build.
-eclipse {
- // need to specify Java source sets explicitly, SpringSource Gradle Eclipse -plugin
- // ignores any nodes added in classpath.file.withXml
- sourceSets {
- main {
- java.srcDirs "src", 'gen'
- }
- }
-
- jdt {
- sourceCompatibility = 1.6
- targetCompatibility = 1.6
- }
-
- classpath {
- plusConfigurations += [ project.configurations.compile ]
- containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'
- }
-
- project {
- name = appName + "-android"
- natures 'com.android.ide.eclipse.adt.AndroidNature'
- buildCommands.clear();
- buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder"
- buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder"
- buildCommand "org.eclipse.jdt.core.javabuilder"
- buildCommand "com.android.ide.eclipse.adt.ApkBuilder"
- }
-}