Java Checkstyle报告捕获异常参数上的LocalFinalVariableNameCheck错误

Java Checkstyle报告捕获异常参数上的LocalFinalVariableNameCheck错误,java,checkstyle,metrics,coding-style,Java,Checkstyle,Metrics,Coding Style,我有一个奇怪的问题,我不确定这是两耳之间的问题还是支票风格的问题。 运行checkstyle 6.2时,我们在jenkins和eclipse中都会遇到以下错误: LocalFinalVariableNameCheck, Priority: Normal Name 'pEx' must match pattern '^l[A-Z][a-zA-Z0-9]*$'. 这就是代码 ... } catch (final XPathExpressionException pEx) { throw

我有一个奇怪的问题,我不确定这是两耳之间的问题还是支票风格的问题。 运行checkstyle 6.2时,我们在jenkins和eclipse中都会遇到以下错误:

LocalFinalVariableNameCheck, Priority: Normal 

Name 'pEx' must match pattern '^l[A-Z][a-zA-Z0-9]*$'.
这就是代码

...
} catch (final XPathExpressionException pEx) {
   throw new ConfigurationException(pEx);
}

为什么checkstyle将catch块定义为本地变量而不是参数?

try{}catch(){}是一个语句而不是一个方法调用。因此,pEx是一个局部变量,而不是一个参数。

正如@Dongqing所指出的,pEx确实是一个局部变量,因此检查适用于这里

不过需要注意的是:此规则的默认值是(工具的最新版本)中指定的
^[a-z][a-zA-Z0-9]*$
。您可能已经定制了适合当地标准的图案
^l[A-Z][A-zA-Z0-9]*$
。因此,在删除冲突之前,您可能应该确保命名模式确实正常(如果不适合,为什么要定义自定义规则?)

如果您真的想消除这种冲突,Checkstyle提供了各种抑制警告的方法。你可以:

  • 使用,它允许您针对给定的行范围(甚至列范围)禁止特定文件上的特定规则。这样,您不必修改代码,但需要维护一个包含所有抑制项的单独文件
  • 使用注释或批注通过在代码中添加注释或批注(例如
    @SuppressWarnings
    )禁用警告,其中误报为。 这也必须配置。有关更多详细信息和示例,请参见上面的链接
编辑:此Checkstyle规则还允许您调整变量声明catch子句的模式。以下配置应适用于您:

<module name="LocalVariableName">
    <property name="format" value="^[a-zA-Z0-9]*$"/>
    <property name="tokens" value="PARAMETER_DEF"/>
</module>


这里您只为catch子句中的违规指定了一个非常宽容的模式。变量声明不应受到影响,仍应检查原始模式。

在Boris的帮助下,我找到了解决方案。这是一个与checkstyle 5.7合并的变化,就像它看起来一样

    <module name="LocalFinalVariableName">
        <!-- checkstyle changed to pass exception checks to local vars?!? in version 5.7 -->
        <!-- catch blocks have params => use a different local var -->
        <property name="format" value="^p[a-zA-Z0-9]*$" />
        <property name="tokens" value="PARAMETER_DEF" />
    </module>
    <module name="LocalFinalVariableName">
        <property name="format" value="^l[A-Z][a-zA-Z0-9]*$" />
        <property name="tokens" value="VARIABLE_DEF" />
    </module>
    <module name="LocalVariableName">
        <!-- checkstyle changed to pass exception checks to local vars?!? in version 5.7 -->
        <!-- catch blocks have params => use a different local var -->
        <property name="format" value="^p[a-zA-Z0-9]*$" />
        <property name="tokens" value="PARAMETER_DEF" />
    </module>
    <module name="LocalVariableName">
        <property name="format" value="^l[A-Z][a-zA-Z0-9]*$" />
        <property name="tokens" value="VARIABLE_DEF" />
    </module>


good point thx。你知道如何从异常中删除checkstyle规则吗?Boris,thx。关于规则的使用。我们喜欢对本地变量使用规则。但对于挡块,它不适合。因此,我们搜索一个选项,通过抑制文件或通过正确配置规则跳过catch块,以通用方式禁用localVar和localFinalVar检查异常。我们两个都找不到answer@cilap请参阅我的编辑。您可以调整规则,使其只与给定模式的catch块匹配。嗨,Boris,我已经发布了完整的答案。你的暗示帮助我们找到了它。谢谢