Checkstyle,无法创建根模块

时间:2018-04-04 07:27:19

标签: android checkstyle

我正在尝试在项目中配置Checkstyle。我添加了:

    apply plugin: 'checkstyle'
    checkstyle {
        // assign the latest checkstyle version explicitly
        // default version is very old, likes 5.9
        toolVersion = '8.6'
        // checkstyle.xml copy from:
        // https://raw.githubusercontent.com/checkstyle/checkstyle/checkstyle-8.6/src/main/resources/google_checks.xml
        // the version should be as same as plugin version
        configFile = rootProject.file('config/checkstyle/checkstyle.xml')
    }
    task Checkstyle(type: Checkstyle) {
        source 'src/main/java'
        include '**/*.java'
        exclude '**/gen/**'
        exclude '**/R.java'
        exclude '**/BuildConfig.java'

        // empty classpath
        classpath = rootProject.files()
    }

allprojects中的根gradle文件。

但是当我运行./gradlew checkstyle

我明白了:

* What went wrong:
Execution failed for task ':app:Checkstyle'.
> Unable to create Root Module: config {/Users/user/Development/project/config/checkstyle/checkstyle.xml}, classpath {null}.

即使是带有规则的文件也位于指定的目录中。

11 个答案:

答案 0 :(得分:7)

摘自version 8.24的发行说明:

将LineLength Check父级从TreeWalker更改为Checker。

所以我不得不搬走

<module name="LineLength">

从内部

<module name="TreeWalker">

到内部

<module name="Checker">

答案 1 :(得分:3)

我也有类似的问题和相同的异常消息。以下步骤解决了我的问题:

将工具版本更新为8.16。在我达到8.1之前 我使用了“ configDir”而不是“ configFile”属性。

configDir = file("$rootProject.projectDir/etc/checkstyle")

之前是:

configFile = file("$rootProject.projectDir/etc/checkstyle/checkstyle.xml")

此外,我还有一个'reportDir'属性,该属性也已更改为指向目录而不是文件。

reportsDir = file("$project.buildDir/reports/checkstyle")

之前是:

reportsDir = file("$project.buildDir/reports/checkstyle/checkstyle.xml")

我正在使用JDK 11,并且可以使用它。

答案 2 :(得分:2)

config/checkstyle/checkstyle.xml包含对不存在文件的引用时,出现此错误。就我而言,通过:

<module name="SuppressionFilter">
    <property name="file" value="config/checkstyle/checkstyle-suppressions.xml"/> <!-- Oops: No such file! -->
</module>

创建文件config/checkstyle/checkstyle-suppressions.xml解决了该问题。

如果有帮助,其内容(与checkstyle.xml相同的标头)为:

<suppressions>
    <suppress files="/generated/" checks="\w+"/>
    <suppress files="/test/" checks="\w+"/>
</suppressions>

答案 3 :(得分:1)

我已经看到了这个问题的不同维度的问题(在SO和github上都提出了),这是我发现的内容的摘要。

我假设checkstyle.xml的位置在这里不是问题。在介绍此解决方案之前,我建议您仔细阅读其他有关如何解决该问题的答案。最快的验证方法是将此打印语句放入您的一项任务中并运行它(任务)

println(file("${rootDir.projectDir}/path/to/checkstyle.xml"))

确保其在控制台中打印出的路径正确/有效。如果这是正确的路径,但是您仍然看到错误,则说明存在其他问题;继续以下情况:

  • 如果您这样在Gradle中添加了checkstyle插件(我正在使用Gradle> = 4.0):
plugins {
id 'checkstyle'
}

默认的checkstyle版本将用于该版本的Gradle。对于Gradle版本和默认Check Style插件版本HERE

,还有另一个兼容性列表
  • 如果您想指定插件要使用的checkstyle.xml,则需要牢记这一点-包含插件版本与兼容checkstyle.xml版本的矩阵。对于谷歌检查风格,我发现最好的方法是检查插件版本。例如,如果我想在项目中使用版本8.2,则其build.gradle条目将如下所示:
plugins {
id 'checkstyle'
}

checkstyle {
  project.ext.checkstyleVersion = '8.20'
}

这将自动使用(拉出)与指定版本(即8.20)兼容的checkstyle.xml

  • 如果您想自定义(添加/删除)某些检查样式规则,我建议您从(编辑)兼容版本开始。 要了解与此插件版本兼容的checkstyle.xml版本,请访问Github上的Google Checkstyle releases并下载8.20 release zip或tar。 解压缩后,在src/main/resources/目录中找到google(或sun)checkstyle xml。根据需要自定义xml后,您的build.gradle条目将如下所示

plugins {
id 'checkstyle'
}

checkstyle {
  project.ext.checkstyleVersion = '8.20'
  configFile = file("${rootDir.projectDir}/path/to/google_checks.xml")
}

希望您将不再看到该错误。

答案 4 :(得分:1)

对我来说,由于Java版本不匹配而失败。

我正在运行java 11,但在build.gradle中,sourceCompatibility = 1.8

一旦我切换到Java 1.8,它就可以正常工作。

答案 5 :(得分:0)

每当无法读取配置文件时,都会发生此错误。您确定有一个/Users/user/Development/project/config/checkstyle/checkstyle.xml文件吗?

答案 6 :(得分:0)

我有一个非常相似的问题,我基本上使用了@Bohemian的答案。 checkStyle找不到文件,所以我强制它想要它。就我而言,根本原因是NetBeans的gradle插件未正确传播所有“环境”变量,因此对${basedir}/config/checkstyle/import-control.xml的引用失败。当checkStyle在NetBeans中运行时,${basedir}设置为$USER_HOME,而不是项目的根目录。解决方法是,将所需文件复制到主目录中,以使checkStyle能够正确运行。
丑陋,但总比没有好。

答案 7 :(得分:0)

问题是找不到规则文件。所以我改变了:

configFile = rootProject.file('config/checkstyle/checkstyle.xml')

收件人:

configFile = file("${rootDir}/config/checkstyle/ckeckstyle.xml")

现在它可以正确拾取了。

答案 8 :(得分:0)

当我将Android Gradle插件更新为3.3.0时,这发生在我身上

请运行以下命令:

  

./ gradlew checkstyle --stacktrace

可能您需要检查您的 checkstyle.xml 配置文件。

我需要移动这两个标签:

 <module name="SuppressionCommentFilter"/>

        <!--Enable usage SUPPRESS CHECKSTYLE comment-->
        <module name="SuppressWithNearbyCommentFilter">
            <property name="commentFormat" value="CHECKSTYLE IGNORE"/>
            <property name="checkFormat" value=".*"/>
            <property name="influenceFormat" value="0"/>
        </module>

内部

<module name="TreeWalker"> 

标签

我还需要删除:

<module name="SuppressionCommentFilter"/>

答案 9 :(得分:0)

此问题也可能是由于您在checkstyle配置中使用了过时的api。请参见此链接herehere

答案 10 :(得分:-1)

我的问题是,此过程是从与我原来认为不同的目录中运行的。

即使我检查以确保checkstyle.xml确实存在于它显示的路径中,但由于我的构建过程未能将cd移至正确的目录来运行它,因此它仍在中断!

请确保您正在从自己认为的位置运行此程序!