CheckStyle代码检查工具
1.介绍
Checkstyle 是一种开发工具,可帮助程序员编写符合编码标准的 Java 代码。它使检查 Java 代码的过程自动化,从而使开发者免于完成这项无聊(但重要)的任务。这使得它非常适合想要强制执行编码标准的项目
Checkstyle 可以检查源代码的许多方面。它可以发现类设计问题、方法设计问题。它还能够检查代码布局和格式问题
2.定义扫描规则
CheckStyle 有着众多扫描规则,涵盖种类非常之多,容易让人眼花缭乱。这里提供一份开源项目 Hippo4j 正在使用的规则文件,如需个性化可参考官网进行修改
创建自定义 checkstyle.xml 文件:
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker"><module name="NewlineAtEndOfFile"/><module name="RegexpSingleline"><property name="format" value="printStackTrace"/><property name="message" value="Prohibit invoking printStackTrace in source code !"/></module><module name="TreeWalker"><module name="AvoidStarImport"><property name="excludes" value="java.io,java.net,java.lang.Math"/><property name="allowClassImports" value="false"/><property name="allowStaticMemberImports" value="true"/></module><module name="IllegalImport"/><module name="RedundantImport"/><module name="UnusedImports"/><module name="JavadocType"><property name="allowUnknownTags" value="true"/><property name="allowMissingParamTags" value="true"/><message key="javadoc.missing" value="Class Comments: Missing Javadoc Comments"/></module><!-- Do not scan method annotations for now --><!--<module name="JavadocMethod"><property name="tokens" value="METHOD_DEF"/><property name="allowMissingPropertyJavadoc" value="true"/><message key="javadoc.missing" value="Method Comments: Missing Javadoc Comments"/></module>--><module name="LocalFinalVariableName"/><module name="LocalVariableName"/><module name="PackageName"><property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" /></module><module name="StaticVariableName"/><module name="TypeName"/><module name="MemberName"/><module name="MethodName"/><module name="ParameterName "/><module name="ConstantName"/><module name="ArrayTypeStyle"/><module name="UpperEll"/><module name="LineLength"><property name="max" value="200"/></module><module name="MethodLength"><property name="tokens" value="METHOD_DEF"/><property name="max" value="150"/></module><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"/><module name="ModifierOrder"/><module name="RedundantModifier"/><module name="AvoidNestedBlocks"/><module name="EmptyBlock"/><module name="LeftCurly"/><module name="NeedBraces"/><module name="RightCurly"/><module name="EmptyStatement"/><module name="EqualsHashCode"/><module name="IllegalInstantiation"/><module name="InnerAssignment"/><module name="MagicNumber"><property name="ignoreNumbers" value="0, 1, 2"/><property name="ignoreAnnotation" value="true"/><property name="ignoreHashCodeMethod" value="true"/><property name="ignoreFieldDeclaration" value="true"/></module><module name="MissingSwitchDefault"/><module name="SimplifyBooleanExpression"/><module name="SimplifyBooleanReturn"/><module name="FinalClass"/><module name="InterfaceIsType"/><module name="VisibilityModifier"><property name="packageAllowed" value="true"/><property name="protectedAllowed" value="true"/></module><module name="StringLiteralEquality"/><module name="NestedForDepth"><property name="max" value="3"/></module><module name="NestedIfDepth"><property name="max" value="4"/></module><module name="UncommentedMain"><property name="excludedClasses" value=".*Application$"/></module><module name="Regexp"><property name="format" value="System\.out\.println"/><property name="illegalPattern" value="true"/></module><module name="ReturnCount"><property name="max" value="4"/></module><module name="NestedTryDepth "><property name="max" value="4"/></module><module name="SuperFinalize"/><module name="SuperClone"/></module></module>
3.使用方式
CheckStyle 有两种常用的使用方式,分别是通过代码编辑器 IDEA 和 Maven 配合使用
4.IDEA插件使用方式
5.Maven插件使用CheckStyle
介绍
由于项目是Maven项目,希望在编译的时候自动执行检查,不需要额外手动执行,可以选择在pom.xml配置maven-checkstyle-plugin插件,绑定到Maven的生命周期,这样在执行mvn compile等命令时自动触发执行检查
单模块项目
在项目根目录新建一个 dev-support 文件夹,将代码规约配置文件放到此路径下,当然你也可以根据自己的需求去自行定义
单模块的Maven项目只需要配置plugins即可, pom.xml配置如下:
<plugins><plugin><artifactId>maven-checkstyle-plugin</artifactId><version>3.1.0</version><configuration><configLocation>${maven.multiModuleProjectDirectory}/dev-support/checkstyle.xml</configLocation><includeTestSourceDirectory>true</includeTestSourceDirectory><excludes>**/autogen/**/*</excludes></configuration><executions><execution><id>validate</id><goals><goal>check</goal></goals><phase>validate</phase></execution></executions></plugin>
</plugins>
多模块项目
多模块的maven项目,只需要在父模块的pom.xml里面配置插件即可
6.文件末以空行结尾问题解决
明明已经以空行结尾了还是CheckStyle会提示这个,所以建议忽略它,配置的xml文件修改如下:
<module name="NewlineAtEndOfFile"><property name="severity" value="ignore"/></module>
7.Jenkins配置CheckStyle
暂时省略