禁用特定 java 包的所有 checkstyle 检查

Posted

技术标签:

【中文标题】禁用特定 java 包的所有 checkstyle 检查【英文标题】:Disable all checkstyle checks for a specific java package 【发布时间】:2011-04-30 13:07:26 【问题描述】:

我有两个包,即

com/mydomain/abc/delegate/xyz/jaxws/managed

com/mydomain/abc/xyz/jaxws/managed

我要求仅对第二个包禁用 checkstyle,因为它们包含自动生成的代理类。

我使用了如下图所示的 suppress.xml

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
    "-//Puppy Crawl//DTD Suppressions 1.1//EN"
    "suppressions_1_1.dtd">

<suppressions>
       <!-- Suppress JavadocPackage in the test packages -->
       <suppress checks="JavadocPackage" files="[\\/]test[\\/]"/>

    <!-- Suppress all checkstyle for autogenerated jaxws.managed package -->
    <suppress checks="[a-zA-Z0-9]*" files="([^(delegate)])+([a-z]*[\\/]jaxws[\\/]managed[\\/])+"/>
</suppressions>

请注意,第一个禁用 JavadocPackage 检查的抑制工作正常,但第二个没有。我担心我选择包的正则表达式可能是错误的。非常感谢任何帮助。

举个例子说明我的要求:

选择的标准是包名应以jaxws.managed结尾,但包名中不应包含delegate。包名中delegate 的更多内容应位于jaxws.managed 之前:

例如:必须启用包com.mycomany.delegate.service.jaxws.managed 中的检查类型检查,而必须禁用com.mycompany.abc.service.jaxws.service 中的检查类型检查,并且需要注意的是,我不知道除此模式之外的所有包名称。

感谢和问候 思比

【问题讨论】:

【参考方案1】:

只需使用抑制:

<suppress checks="." files="com[\\/]mydomain[\\/]abc[\\/]xyz[\\/]jaxws[\\/]managed[\\/]"/>

或者,我建议只将要检查的文件传递给 Checkstyle。例如,如果您使用的是 ANT,请使用 a 指定要处理的文件,并使用 指定要忽略的文件。

例如:

<fileset dir="src">
  <include name="**/*.java"/>
  <exclude name="com/mycompany/abc/service/jaxws/service/*.java"/>
</fileset>

【讨论】:

嗨奥利弗,谢谢你的回复。您的解决方案适用于整个包名称已知的情况。在我的情况下,选择的标准是包名应该以“jaxws.managed”结尾,但包名中不应包含“delegate”。包名称中的“delegate”应位于“jaxws.managed”之前:例如:必须启用包“com.mycomany.delegate.service.jaxws.managed”中的checktyle检查,而com.mycompany.abc.service中的检查必须启用.jaxws.service" 必须被禁用。感谢 Oliver 在我的问题中指出这种歧义。【参考方案2】:

(?!委托\b) [\/][a-z]*[\/]jaxws[\/]托管[\/]

【讨论】:

以上是关于禁用特定 java 包的所有 checkstyle 检查的主要内容,如果未能解决你的问题,请参考以下文章

CheckStyle,定制自己的Java编码规范

Java代码规范和质量检查插件-Checkstyle(官方资源)

如何解决 Intellij Idea 的所有 checkstyle 问题?

如何从 checkstyle 插件检查中排除 module-info.java?

如何在 Sonar Qube 7.8 中导入 google java checkstyle?

CheckStyle