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最新的版本。
有什么问题请留言~?