Checkstyle 忽略 XML 资源:fileExtensions 不会增加 Gradle 任务输入
在 checkstyle.xml 中加入 xml 扩展名后,Gradle 仍只检查 Java。先扩展 Checkstyle 任务的 source,再核对规则是否支持该文件类型。
checkstyle.xml 已把 fileExtensions 设为包含 xml,资源目录中的违规 XML 却没有报告,Java 文件仍正常报错。先检查 Gradle 的 Checkstyle 任务收到了哪些文件:扩展名配置不会把没有传给 Checkstyle 的文件补进来。
Gradle 9.1.0 的默认插件按 Java 源集创建检查任务,输入偏向 Java 源码。这里存在两层选择:Gradle 先决定传入文件集合,Checkstyle 再按 Checker 和具体检查项处理扩展名。只改后者,无法扩展前者。
把需要检查的资源纳入原任务
已经应用 Java 与 Checkstyle 插件的 Groovy build.gradle,可以仅调整主源码任务:
tasks.named('checkstyleMain', Checkstyle) {
source = sourceSets.main.allSource
}
allSource 表示这个源集的全部源码与资源。若只想检查某个资源目录,或源集中还包含二进制资源,应使用更窄的文件树和包含模式。测试资源由相应测试任务处理,不会因修改 checkstyleMain 自动纳入。
还要检查原任务有没有 include、exclude、源码生成器或插件随后覆盖 source。任务输入最终仍只剩 .java 时,继续改 Checker 扩展名不会产生效果。不要把扫描范围直接设成项目根,否则可能把构建产物和依赖缓存也扫进去。
规则本身也要适合文件类型
纳入 XML 不表示 Java 语法树检查器能解析 XML。Checkstyle 中依赖 Java TreeWalker 的检查,与针对文本行、换行或其他通用文件特征的检查,支持范围不同。应确认实际规则能处理目标扩展名,避免把“没有检查”变成另一种解析失败。
先用一份本应触发该规则的受控资源文件验证,再核对已有 Java 违规仍能被检测。检查报告应明确包含这份资源,而不只是任务退出成功。若任务显示 NO-SOURCE,优先回查文件集合和匹配规则。
改动只影响扫描范围,不应顺便放宽错误门禁或忽略所有失败。保存原任务配置;若新增资源类型导致规则不兼容,收窄任务或拆成适合的检查任务,再分别验证,不能以跳过 Checkstyle 作为完成。


