Checkstyle简介

22-12-29 banq

Checkstyle 是一种开源工具,可根据一组可配置的规则检查代码。
支持Maven 和各种 IDE 插件。

如果我们不想使用打包的 Google 或 Sun 检查,我们有办法创建我们自己的自定义配置 XML 文件。
这是自定义配置文件:

<!DOCTYPE module PUBLIC
  "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
  "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
    <module name="TreeWalker">
        <module name="AvoidStarImport">
            <property name="severity" value="warning" />
        </module>
    </module>
</module>

第一行,即 DOCTYPE 定义是文件的重要部分,它告诉从哪里下载 DTD,以便系统可以理解配置。
如果我们不在我们的配置文件中包含这个定义将不是一个有效的配置文件。

配置文件主要由模块组成。一个模块有一个属性名,代表模块做什么。name属性的值对应于插件代码中的一个类,该代码在插件运行时执行。
让我们了解上面配置中存在的不同模块:
  • Checker:模块结构在树中,根部有 Checker 模块。此模块定义由配置的所有其他模块继承的属性。
  • TreeWalker:此模块检查各个 Java 源文件并定义适用于检查此类文件的属性。
  • AvoidStarImport:此模块设置了在我们的 Java 代码中不使用 Star 导入的标准。它还具有一个属性,要求插件将此类问题的严重性报告为警告。因此,只要在代码中发现此类违规行为,就会对它们发出警告。


Checkstyle 配置指定要插入哪些模块并将其应用于 Java 源文件。模块以树的形式构建,其根是Checker模块。下一级模块包含:
  • 文件集检查- 采用一组输入文件和触发违规消息的模块。
  • 过滤器 - 过滤审计事件(包括消息)以供接受的模块。
  • 审计侦听器- 报告已接受事件的模块。

许多检查是TreeWalker 文件集检查模块的子模块。TreeWalker 的运行方式是分别将每个 Java 源文件转换为抽象语法树,然后将结果传递给它的每个子模块,这些子模块依次查看树的某些方面。

<module name="Checker">
  <module name="JavadocPackage"/>
  <module name="TreeWalker">
    <module name="AvoidStarImport"/>
    <module name="ConstantName"/>
    <module name="EmptyBlock"/>
  </module>
</module>


一个模块的属性控制该模块如何执行其任务。每个模块的属性都有一个默认值,如果默认值令人满意,你不需要在配置文档中定义一个属性。要给一个模块的属性指定一个非默认值,请在配置XML文档中定义一个模块元素的子属性元素。同时为该属性元素提供适当的名称和值属性。例如,模块MethodLength的属性max指定了方法或构造函数的最大允许行数,其默认值为150。下面是一个模块MethodLength的配置,这样检查就会报告超过60行的方法和构造函数。

<module name="MethodLength">
  <property name="max" value="60"/>
</module>