Checkstyle:Checkstyle异常:无法找到但文件存在。

3

我的Checkstyle配置似乎无法找到我的suppressions.xml,但它确实存在,并且它正在使用的文件路径有效。 我的checkstyle.xml和suppressions.xml都在config/checkstyle中。我的checkstyle.xml包含以下内容:

<module name="SuppressionFilter">
    <property name="file" value="${config_loc}\suppressions.xml"/>
    <property name="optional" value="false"/>
</module>

当我运行gradlew check --stacktrace命令时,堆栈跟踪显示如下:
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Unable to find: C:\Users\ntroncoso\Online Drive\projects\test-project\test-project-sdk\config\checkstyle\suppressions.xml
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.getSuppressionLoader(SuppressionsLoader.java:287)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:238)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.loadSuppressions(SuppressionsLoader.java:224)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionFilter.finishLocalSetup(SuppressionFilter.java:269)
        at com.puppycrawl.tools.checkstyle.api.AutomaticBean.configure(AutomaticBean.java:197)
        at com.puppycrawl.tools.checkstyle.Checker.setupChild(Checker.java:477)
        ... 206 more
Caused by: java.io.FileNotFoundException: http://www.puppycrawl.com/dtds/configuration_1_3.dtd
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:647)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1304)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1270)
        at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:264)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1161)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1045)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:959)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
        at com.puppycrawl.tools.checkstyle.XmlLoader.parseInputSource(XmlLoader.java:86)
        at com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader.getSuppressionLoader(SuppressionsLoader.java:283)

正如我之前提到的,我可以将该文件路径复制并粘贴到文件浏览器中打开。我也尝试过直接硬编码完整路径,但是我遇到了同样的错误。唯一让我想到的可能问题就是 \ntroncoso 部分。有些系统会将其视为路径中的换行符。但通常,该错误信息也会打印出换行符,所以我不认为这是问题所在。


你使用的是哪个版本的Checkstyle?在gradle之外的命令行中运行Checkstyle是否会出现相同的错误?你能展示更多来自Checkstyle的堆栈跟踪吗? - rveach
我正在使用8.27版本。我发现有8.32版本可用,所以我尝试了一下。但是,它给出了相同的错误。我已经在上面更新了完整的堆栈跟踪信息。 - Troncoso
1个回答

3

文件未找到异常: http://www.puppycrawl.com/dtds/configuration_1_3.dtd

这是您真正的错误。您的抑制文件使用了错误的DTD。首先,您正在为抑制文件使用配置DTD。其次,puppycrawl域名已经过时,现在已经迁移到checkstyle.org。

DTD应更改为https://checkstyle.org/dtds/suppressions_1_2.dtd,这是目前最新版本Checkstyle的最新DTD。

请参见https://github.com/checkstyle/checkstyle/blob/master/config/suppressions.xml,了解正确的抑制文件示例。


非常感谢。我只关注了顶层异常。 - Troncoso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接