CheckStyle简介

2023/05/09

1. 概述

Checkstyle是一个开源工具,它可以根据一组可配置的规则检查代码。

在本教程中,我们将了解如何通过Maven和使用IDE插件将Checkstyle集成到Java项目中

以下各节中提到的插件不相互依赖,可以单独集成到我们的构建或IDE中。例如,我们的pom.xml中不需要Maven插件来在我们的Eclipse IDE中运行验证。

2. Checkstyle Maven插件

2.1 Maven配置

要将Checkstyle添加到项目中,我们需要在pom.xml的reporting部分添加插件:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <configLocation>checkstyle.xml</configLocation>
            </configuration>
        </plugin>
    </plugins>
</reporting>

这个插件带有两个预定义的检查,一个Sun风格的检查和一个Google风格的检查。项目的默认检查是sun_checks.xml。

要使用我们的自定义配置,我们可以指定我们的配置文件,如上面的示例所示。使用此配置,插件现在将读取我们的自定义配置,而不是提供的默认配置。

该插件的最新版本可以在Maven Central上找到。

2.2 报告生成

现在我们的Maven插件已经配置完毕,我们可以通过运行mvn site命令为我们的代码生成报告。构建完成后,该报告可以在target/site文件夹中找到,文件名称为checkstyle.html

Checkstyle报告分为三个主要部分:

Files:报告的这一部分为我们提供了发生违规行为的文件列表。它还向我们显示了违规行为的严重性级别。报告的Files部分如下所示:

Rules报告的这一部分概述了用于检查违规行为的规则。它显示了规则的类别、违规的数量和这些违规行为的严重程度。以下是显示Rules部分的报告示例:

Details:最后,报告的Details部分为我们提供了已发生违规行为的详细信息。提供的详细信息是行号级别的。以下是报告的示例详细信息部分:

2.3 构建集成

如果需要对编码风格进行严格的检查,我们可以将插件配置为在代码不符合标准时构建失败

我们通过在插件定义中添加一个执行目标来做到这一点:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>${checkstyle-maven-plugin.version}</version>
    <configuration>
        <configLocation>checkstyle.xml</configLocation>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

configLocation属性定义了要参考哪个配置文件进行验证。

在我们的例子中,配置文件是checkstyle.xml。execution部分中指定的目标check要求插件在构建的verify阶段运行,并在发生违反编码标准时强制构建失败。

现在,如果我们运行mvn clean install命令,它将扫描文件是否存在违规行为,如果发现任何违规行为,构建将失败。

我们也可以使用mvn checkstyle:check只运行插件的check目标,而无需配置执行目标。如果存在任何验证错误,运行此步骤也会导致构建失败。

3. Eclipse插件

3.1 配置

就像Maven集成一样,Eclipse使我们能够使用我们的自定义配置。

要导入我们的配置,请转到Window -> Preferences -> Checkstyle。在“Global Check Configurations”部分,单击“NEW”。

这将打开一个对话框,为我们提供指定自定义配置文件的选项。

3.2 报告浏览

现在我们的插件已经配置好了,我们可以使用它来分析我们的代码。

要检查项目的编码风格,请在Eclipse Project Explorer中右键单击项目并选择CheckStyle -> Check Code with Checkstyle。

该插件将在Eclipse文本编辑器中为我们提供有关Java代码的反馈。它还将为项目生成违规报告,该报告可作为Eclipse中的视图使用。

要查看违规报告,请转到Window -> Show View -> Other,然后搜索Checkstyle。应显示“Violations”和“Violations Chart”选项。

选择任一选项都会向我们展示按类型分组的违规行为。以下是示例项目的违规饼状图:

单击饼状图的某个部分会将我们带到代码中实际违规的列表

或者,我们可以打开Eclipse IDE的Problem视图并检查插件报告的问题。

下面是Eclipse IDE的Problem视图示例:

单击任何警告都会将我们带到发生违规的代码。

4. IntelliJ IDEA插件

4.1 配置

与Eclipse一样,IntelliJ IDEA也使我们能够在项目中使用我们自己的自定义配置。

在IDE中,打开Settings并搜索”Checkstyle“,将显示一个窗口,可以选择我们的checks。单击+按钮,将打开一个窗口,让我们指定要使用的文件的位置。

现在,我们选择一个配置XML文件并单击Next。这将打开上一个窗口并显示我们新添加的自定义配置选项。我们选择新配置并单击OK开始在我们的项目中使用它。

4.2 报告浏览

现在我们的插件已经配置好了,让我们使用它来检查违规行为。要检查特定项目的违规行为,请转到Analyze -> Inspect Code。

从检查结果中可以查看Checkstyle部分下的违规情况。下面是一个示例报告:

单击违规将带我们到文件中发生违规的确切行。

5. 自定义Checkstyle配置

在Maven报告生成部分(第2.2节),我们使用自定义配置文件来执行我们自己的编码标准检查。

如果我们不想使用打包的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>

5.1 DOCTYPE定义

DOCTYPE定义的第一行是文件的重要组成部分,它告诉从哪里下载DTD,以便系统可以理解配置。

如果我们不在配置文件中包含此定义,则此文件不是有效的配置文件

5.2 模块

配置文件主要由模块组成。一个模块有一个属性name,它代表模块的作用。name属性的值对应于插件代码中的一个类,该类在插件运行时执行。

让我们了解上面配置中存在的不同模块。

5.3 模块详情

  • Checker:模块在以Checker模块为根的树中结构化,此模块定义由配置的所有其他模块继承的属性。
  • TreeWalker:此模块检查各个Java源文件并定义适用于检查此类文件的属性。
  • AvoidStarImport:此模块为在我们的Java代码中不使用“*”导入设置了一个标准。它还有一个property定义,要求插件将此类问题的严重性报告为警告。因此,只要在代码中发现此类违规行为,都会针对它们发出警告。

要了解有关自定义配置的更多信息,请点击此链接

6. Spring-Rest项目的报表分析

在本节中,我们将阐明Checkstyle所做的分析,使用上面第5节中创建的自定义配置,以GitHub上的spring-rest项目为例。

6.1 违规报告生成

我们已将配置导入到Intellij IDEA,下面是为该项目生成的违规报告:

此处报告的警告指出,应避免在代码中使用通配符导入。我们有3个文件不符合这个标准。当我们单击警告时,它会将我们定向到存在违规的Java文件。

以下是SimplePostController.java文件如何显示报告的警告:

6.2 问题解决

一般来说,使用“*”导入不是一个好的做法,因为当两个或多个包包含相同的类时,它可能会产生冲突。

例如,考虑List类,它在java.util和java.awt包中都存在。如果我们同时使用java.util.*和java.awt.*的导入,我们的编译器将无法编译代码,因为List在两个包中都可用。

为了解决上述问题,我们可以通过导入单独的某个类然后保存代码。现在,当我们再次运行插件时,我们不会再看到任何违规行为,并且我们的代码现在遵循自定义配置中设置的标准。

7. 总结

在本文中,我们介绍了在Java项目中集成Checkstyle的基础知识。

我们了解到,它是一个简单而强大的工具,用于确保开发人员遵守组织设定的编码标准。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章