天天看點

CheckStyle 編寫自己的代碼檢查插件CheckStyle 編寫自己的代碼檢查插件重點網站從頭開始checkstyle常見配置項介紹結語

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最新的版本。

有什麼問題請留言~🎉