我正在尝试在项目中配置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}.
即使是带有规则的文件也位于指定的目录中。
答案 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"))
确保其在控制台中打印出的路径正确/有效。如果这是正确的路径,但是您仍然看到错误,则说明存在其他问题;继续以下情况:
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)
答案 10 :(得分:-1)
我的问题是,此过程是从与我原来认为不同的目录中运行的。
即使我检查以确保checkstyle.xml
确实存在于它显示的路径中,但由于我的构建过程未能将cd
移至正确的目录来运行它,因此它仍在中断!
请确保您正在从自己认为的位置运行此程序!