【问题标题】:How to add checkstyle to a libGDX project?如何将 checkstyle 添加到 libGDX 项目?
【发布时间】:2019-07-17 23:21:16
【问题描述】:

我有以下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

【问题讨论】:

  • 我不知道 gradle 但这些似乎是与 checkstyle 或其文件无关的编译错误。
  • 我不介意,我宁愿看到您对问题进行排序,然后列出哪些标签。您能否通过从项目中删除 checkstyle 来确认这不是 checkstyle 问题,看看没有它 gradle build 是否仍然失败?如果项目在没有任何更改的情况下成功构建,可能会倒退到导致失败的最小分母。
  • 解决了吗? Githhub 项目合并为 checkstyle 并修复了一堆代码。见github.com/Glusk2/sprouts/pull/23/files

标签: gradle libgdx android-gradle-plugin


【解决方案1】:

默认情况下,将checkstyle 插件应用于 Android gradle 项目什么都不做(它不添加任何 checkstyle 任务),因为:

请注意,Android 插件使用自己的源集实现。

Android Gradle plugin; sourceSets{}

Android 插件有自己的sourceSet 概念,并且不填充java-base 插件的sourceSet 集合。
因此,默认情况下,应用像 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文件):

// ...
eclipse {
    // ...
    sourceSets {
        main {
            java.srcDirs "src", 'gen'
        }
    }
    // ...
}
// ...

它设置了checkstyle插件可以检测到的sourceSets,但配置显然不完整,因为构建失败任务: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 项目中的类似问题之后......

...我想出了解决方案。


解决方案

build.gradle:

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

+    checkstyle {
+        configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml")
+    }
// ...
}
// ...

安卓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"
-    }
-}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2015-07-27
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多