Как добавить checkstyle в проект libGDX? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть следующий libGDX проект: https://github.com/Glusk2/sprouts

Я попытался добавить checkstyle ко всему проекту в корневом файле build.gradle, например:

// ...
allprojects {
    apply plugin: "eclipse"
    apply plugin: "idea"
    apply plugin: "checkstyle"
    // ...
}
// ...

и добавил config/checkstyle/checkstyle.xml в корневой проект.


Но это не работает.Я получаю эту ошибку после запуска ./gradlew build connectedCheck:

:android:compileJava                 
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:3: error: package android.os does not exist
import android.os.Bundle;            
                    ^
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:9: error: cannot access Activity
public class AndroidLauncher extends AndroidApplication {
        ^
    class file for android.app.Activity not found
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:11: error: cannot find symbol
        protected void onCreate (Bundle savedInstanceState) {
                                    ^
    symbol:   class Bundle
    location: class AndroidLauncher
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:10: error: method does not override or implement a method from a supertype
        @Override
        ^
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:12: error: cannot find symbol
                super.onCreate(savedInstanceState);
                ^
    symbol:   variable super
    location: class AndroidLauncher
<path-to-project>\sprouts\android\src\com\github\glusk2\sprouts\AndroidLauncher.java:15: error: cannot find symbol
                initialize(new Sprouts(), config);
                ^
    symbol:   method initialize(Sprouts,AndroidApplicationConfiguration)
    location: class AndroidLauncher
6 errors
:android:compileJava FAILED

1 Ответ

0 голосов
/ 28 марта 2019

Применение плагина 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"
-    }
-}
...