IDEA中添加CheckStyle的方法:
1.菜單File->Settings->Plugins 搜索checkstyle,點擊install安裝

2.使用自定義的規則

3.自定義規則范例,導入過程中可能提示各種錯誤。可以從網上download google或sun的范例,對比節點位置,修改自己的規則
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd"> <!-- Checkstyle configuration that checks the Google coding conventions from Google Java Style that can be found at https://google.github.io/styleguide/javaguide.html Checkstyle is very configurable. Be sure to read the documentation at http://checkstyle.org (or in your downloaded distribution). To completely disable a check, just comment it out or delete it from the file. To suppress certain violations please review suppression filters. Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov. --> <module name = "Checker"> <property name="charset" value="UTF-8"/> <property name="severity" value="warning"/> <property name="fileExtensions" value="java, properties, xml"/> <!-- Excludes all 'module-info.java' files --> <!-- See https://checkstyle.org/config_filefilters.html --> <module name="BeforeExecutionExclusionFileFilter"> <property name="fileNamePattern" value="module\-info\.java$"/> </module> <!-- https://checkstyle.org/config_filters.html#SuppressionFilter --> <module name="SuppressionFilter"> <property name="file" value="${org.checkstyle.google.suppressionfilter.config}" default="checkstyle-suppressions.xml" /> <property name="optional" value="true"/> </module> <!-- Checks for whitespace --> <!-- See http://checkstyle.org/config_whitespace.html --> <!-- <module name="FileTabCharacter">--> <!-- <property name="eachLine" value="true"/>--> <!-- </module>--> <module name="LineLength"> <property name="fileExtensions" value="java"/> <property name="max" value="200"/> <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/> </module> <!-- 每個java文件一個語法樹 --> <module name="TreeWalker"> <!-- import檢查--> <!-- 檢查是否從非法的包中導入了類 --> <module name="IllegalImport"/> <!-- 檢查是否導入了多余的包 --> <module name="RedundantImport"/> <!-- 沒用的import檢查,比如:1.沒有被用到2.重復的3.import java.lang的4.import 與該類在同一個package的 --> <module name="UnusedImports" /> <!-- 注釋檢查 --> <!-- 檢查構造函數的javadoc --> <module name="JavadocType"> <property name="allowUnknownTags" value="true"/> <message key="javadoc.missing" value="類注釋:缺少Javadoc注釋。"/> </module> <module name="JavadocMethod"> <property name="tokens" value="METHOD_DEF" /> <message key="javadoc.missing" value="方法注釋:缺少Javadoc注釋。"/> </module> <!-- 命名檢查 --> <!-- 局部的final變量,包括catch中的參數的檢查 --> <module name="LocalFinalVariableName" /> <!-- 局部的非final型的變量,包括catch中的參數的檢查 --> <module name="LocalVariableName" /> <!-- 包名的檢查(只允許小寫字母),默認^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ --> <module name="PackageName"> <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" /> <message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/> </module> <!-- 僅僅是static型的變量(不包括static final型)的檢查 --> <module name="StaticVariableName" /> <!-- Class或Interface名檢查,默認^[A-Z][a-zA-Z0-9]*$--> <module name="TypeName"> <property name="severity" value="warning"/> <message key="name.invalidPattern" value="名稱 ''{0}'' 要符合 ''{1}''格式."/> </module> <!-- 非static型變量的檢查 --> <module name="MemberName" /> <!-- 方法名的檢查 --> <module name="MethodName" /> <!-- 方法的參數名 --> <module name="ParameterName " /> <!-- 常量名的檢查(只允許大寫),默認^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ --> <module name="ConstantName" /> <!-- 定義檢查 --> <!-- 檢查數組類型定義的樣式 --> <module name="ArrayTypeStyle"/> <!-- 檢查long型定義是否有大寫的“L” --> <module name="UpperEll"/> <!-- 方法不超過50行 --> <module name="MethodLength"> <property name="tokens" value="METHOD_DEF" /> <property name="max" value="50" /> </module> <!-- 方法的參數個數不超過5個。 並且不對構造方法進行檢查--> <module name="ParameterNumber"> <property name="max" value="5" /> <property name="ignoreOverriddenMethods" value="true"/> <property name="tokens" value="METHOD_DEF" /> </module> <!-- 空格檢查--> <!-- 方法名后跟左圓括號"(" --> <module name="MethodParamPad" /> <!-- 在類型轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 --> <module name="TypecastParenPad" /> <!-- 檢查在某個特定關鍵字之后應保留空格 --> <module name="NoWhitespaceAfter"/> <!-- 檢查在某個特定關鍵字之前應保留空格 --> <module name="NoWhitespaceBefore"/> <!-- 操作符換行策略檢查 --> <module name="OperatorWrap"/> <!-- 圓括號空白 --> <module name="ParenPad"/> <!-- 檢查分隔符是否在空白之后 --> <module name="WhitespaceAfter"/> <!-- 檢查分隔符周圍是否有空白 --> <module name="WhitespaceAround"/> <!-- 修飾符檢查 --> <!-- 檢查修飾符的順序是否遵照java語言規范,默認public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp --> <module name="ModifierOrder"/> <!-- 檢查接口和annotation中是否有多余修飾符,如接口方法不必使用public --> <module name="RedundantModifier"/> <!-- 代碼塊檢查 --> <!-- 檢查是否有嵌套代碼塊 --> <module name="AvoidNestedBlocks"/> <!-- 檢查是否有空代碼塊 --> <module name="EmptyBlock"/> <!-- 檢查左大括號位置 --> <module name="LeftCurly"/> <!-- 檢查代碼塊是否缺失{} --> <module name="NeedBraces"/> <!-- 檢查右大括號位置 --> <module name="RightCurly"/> <!-- 代碼檢查 --> <!-- 檢查空的代碼段 --> <module name="EmptyStatement"/> <!-- 檢查在重寫了equals方法后是否重寫了hashCode方法 --> <module name="EqualsHashCode"/> <!-- 檢查局部變量或參數是否隱藏了類中的變量 --> <module name="HiddenField"> <property name="tokens" value="VARIABLE_DEF"/> </module> <!-- 檢查子表達式中是否有賦值操作 --> <module name="InnerAssignment"/> <!-- 檢查switch語句是否有default --> <module name="MissingSwitchDefault"/> <!-- 檢查是否有過度復雜的布爾表達式 --> <module name="SimplifyBooleanExpression"/> <!-- 檢查是否有過於復雜的布爾返回代碼段 --> <module name="SimplifyBooleanReturn"/> <!-- 類設計檢查 --> <!-- 檢查類是否為擴展設計l --> <!-- 檢查只有private構造函數的類是否聲明為final --> <module name="FinalClass"/> <!-- 檢查接口是否僅定義類型 --> <module name="InterfaceIsType"/> <!-- 檢查類成員的可見度 檢查類成員的可見性。只有static final 成員是public的 除非在本檢查的protectedAllowed和packagedAllowed屬性中進行了設置--> <module name="VisibilityModifier"> <property name="packageAllowed" value="true"/> <property name="protectedAllowed" value="true"/> </module> <!-- 語法 --> <!-- String的比較不能用!= 和 == --> <module name="StringLiteralEquality"/> <!-- 限制for循環最多嵌套2層 --> <module name="NestedForDepth"> <property name="max" value="2"/> </module> <!-- if最多嵌套3層 --> <module name="NestedIfDepth"> <property name="max" value="3"/> </module> <!-- 檢查未被注釋的main方法,排除以Appllication結尾命名的類 --> <module name="UncommentedMain"> <property name="excludedClasses" value=".*[Application,Test]$"/> </module> <!-- 禁止使用System.out.println --> <module name="Regexp"> <property name="format" value="System\.out\.println"/> <property name="illegalPattern" value="true"/> </module> <!-- return個數 3個--> <module name="ReturnCount"> <property name="max" value="3"/> </module> <!--try catch 異常處理數量 3--> <module name="NestedTryDepth "> <property name="max" value="3"/> </module> <!-- clone方法必須調用了super.clone() --> <module name="SuperClone" /> <!-- finalize 必須調用了super.finalize() --> <module name="SuperFinalize" /> </module> </module>
4.在頁面中檢查代碼

maven添加checkstyle
1.在pom.xml中添加checkstyle組件(build->plugins節點下)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.1.1</version> <configuration> <configLocation>checkstyle.xml</configLocation> </configuration> <executions> <execution> <id>verify-style</id> <phase>validate</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
2.特別注意事項,自定義的規則文件必須放在和pom.xml同級目錄下,否則不會生效

3.項目整體檢測,命令mvn checkstyle:check

4.根據checkstyle-result.xml中的提示修改代碼

5.集成至jenkins:安裝Warnings Next Generation Plugin 組件(可單獨執行校驗,也可集成至項目合並或編譯步驟)

6.查看結果,根據結果修復代碼

