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最新的版本。
有什麼問題請留言~🎉