CheckStyle 编写自己的代码检查插件
checkstyle是用来检查Java代码很好用的工具,Maven中可以添加插件maven-checkstyle-plugin来使用checkstyle,官方默认给了两个检查配置文件 :sun、google。
本篇重点介绍 如何自定义检查文件来编写自定义的代码检查逻辑。
重点网站
- checkStyle配置项介绍网站:https://checkstyle.org/index.html 在这个网站中 每一项配置及其作用和参数都有介绍,想自定义代码检查插件,这个必备。
从头开始
1.在pom中添加插件maven-checkstyle-plugin
<!--maven-checkstyle-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<configLocation>checkStyleConfig/stmtJavaFormatterMaven.xml</configLocation>
<consoleOutput>true</consoleOutput>
<detail>false</detail>
</configuration>
</plugin>
configLocation 配置自定义配置文件的位置,其他属性不多说明
2.编写一个最基本的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"https://checkstyle.org/dtds/packages_1_0.dtd">
<module name="Checker">
<module name="TreeWalker">
</module>
</module>
很基础的xml结构,checker是最外层结构、TreeWalker是内侧结构。而需要添加检查就像搭积木一样,一项项加就ok了。
例如添加包检查、常量命名检查、空块检查:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"https://checkstyle.org/dtds/packages_1_0.dtd">
<module name=" Checker">
<module name=" TreeWalker">
<!-- 包引用检查 -->
<module name=" AvoidStarImport" />
<!-- 常量命名检查 -->
<module name=" ConstantName" />
<!-- 空块检查 -->
<module name=" EmptyBlock" />
</module>
</module>
##3.常用maven命令来执行checkstyle
mvn checkstyle:help 查看帮助
mvn checkstyle:check 查看工程是否满足检查。如果不满足,检查失败,可以通过target/checkstyle-result.xml来查看
mvn checkstyle:checkstyle 查看工程是否满足检查。如果不满足,不会失败,可以通过target/site/checkstyle.html查看检查信息
mvn checkstyle:checkstyle-aggregate 检查工程是否满足检查。如果不满足,不会失败,可以通过target/site/checkstyle.html查看
当然你也可以通过配置pom文件来达到运行时检查的目的。
checkstyle常见配置项介绍
javaDoc
- Parent Module:Checker
<!-- JavadocPackage检查所有包是否具有包文档(包说明文档 package-info?)。 -->
<module name=" JavadocPackage" />
Header
java文件开头版权声明
- Parent Module:checker
<module name="Header">
<property name="headerFile"
value="target/classes/header.txt" />
<property name="ignoreLines" value="2,3,4"/>
<property name="fileExtensions" value="java" />
</module>
import
- Parent Module:TreeWalker
<!-- 禁止*格式引用 默认false -->
<module name="AvoidStarImport" />
<!-- 禁止引用的包 -->
<module name="IllegalImport">
<property name="illegalPkgs" value="java.lang" />
</module>
<!-- 检测冗余导入,java.lang的引用也属于冗余的一种 -->
<module name="RedundantImport" />
<!-- 检查未使用的包 -->
<module name="UnusedImports" />
<!-- 检查静态引用,默认false -->
<!-- <module name="AvoidStaticImport" /> -->
<!-- 导入包分组、组内排序、组间排序 -->
<module name="CustomImportOrder">
<!-- 设置强制按字母顺序分组 -->
<property name="sortImportsInGroupAlphabetically"
value="true" />
<!-- 分组之间要求使用空格隔开 -->
<property name="separateLineBetweenGroups"
value="true" />
<!-- 特殊引入匹配 -->
<property name="specialImportsRegExp"
value="^org\." />
<!-- 第三方包引入匹配 -->
<property name="thirdPartyPackageRegExp"
value="^com\." />
<!-- 分组顺序 -->
<property name="customImportOrderRules" value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE" />
</module>
结语
本篇没有详细介绍checkstyle每一项配置项的含义和用法也没这个必要,参考给的重点网站,一步步来一定没有什么问题。偶现问题有:checkstyle属性说明的参数添加在maven-checkstyle-plugin中后运行 mvn checkstyle:checkstyle显示找不到该属性,猜测原因是maven-checkstyle-plugin没有更新到checkstyle最新的版本。
有什么问题请留言~🎉