一、CheckStyle简介
CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是枯燥的任务中解脱出来。
CheckStyle检验的主要内容为:
- Javadoc注释
- 命名约定
- 标题
- Import语句
- 体积大小
- 空白
- 修饰符
- 块
- 代码问题
- 类设计
- 混合检查(包括一些有用的比如非必须的System.out和printstackTrace)
二、CheckStyle配置教程
checkstyle配置有两种方式,第一种为安装插件,第二种为添加依赖,推荐使用第二种。
(一)安装插件方式
1、安装CheckStyle-IDEA插件,安装好后重启idea;
2、给CheckStyle插件配置checkstyle.xml文件;
checkstyle.xml代码:
<?xml version="1.0"?><!DOCTYPEmodulePUBLIC"-//Puppy Crawl//DTD Check Configuration 1.3//EN""http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd"><modulename="Checker"><property name="charset" value="UTF-8"/><property name="fileExtensions" value="java"/><!-- 文件长度不超过1500行 --><modulename="FileLength"><property name="max" value="1500"/></module><!--TreeWalkerChecks--><modulename="TreeWalker"><modulename="SuppressWarningsHolder"/><!--避免转义unicode字符--><modulename="AvoidEscapedUnicodeCharacters"><property name="allowEscapesForControlCharacters" value="true"/><property name="allowByTailComment" value="true"/><property name="allowNonPrintableEscapes" value="true"/></module><modulename="NoLineWrap"/><modulename="OuterTypeFilename"/><!--import检查--><!-- 检查是否从非法的包中导入了类 --><modulename="IllegalImport"/><!-- 检查是否导入了多余的包 --><modulename="RedundantImport"/><!-- 没用的import检查,比如:1.没有被用到2.重复的3.importjava.lang的4.import 与该类在同一个package的 --><modulename="UnusedImports"/><!-- 注释检查 --><!-- 检查方法和构造函数的javadoc --><modulename="JavadocType"><property name="allowUnknownTags" value="true"/><message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/></module><!-- 检查方法的javadoc --><modulename="JavadocMethod"><property name="allowedAnnotations" value="Override, Test"/><property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF "/><message key="javadoc.missing" value="方法注释:缺少Javadoc注释。"/></module><!-- 检查方法的javadoc是否缺失--><modulename="MissingJavadocMethod"><property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF "/></module><!-- 检查类型的javadoc是否缺失--><modulename="MissingJavadocType"/><modulename="RequireEmptyLineBeforeBlockTagGroup"/><modulename="AtclauseOrder"><property name="tagOrder" value="@param, @return, @throws, @deprecated"/><property name="target"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/></module><!-- 方法名的检查 --><modulename="MethodName"><property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/><message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/></module><!-- 方法的参数名 --><modulename="ParameterName"/><!-- 常量名的检查(只允许大写),默认^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ --><modulename="ConstantName"/><!-- 检查long型定义是否有大写的“L” --><modulename="UpperEll"/><!-- 检查switch语句是否有default--><modulename="MissingSwitchDefault"/><!-- 语法 --><!--String的比较不能用!= 和 ==--><modulename="StringLiteralEquality"/><!-- 禁止使用System.out.println --><modulename="Regexp"><property name="format" value="System\.out\.println"/><property name="illegalPattern" value="true"/></module><!--重载方法申明顺序--><modulename="OverloadMethodsDeclarationOrder"/><!--变量声明和第一次使用之间的距离--><modulename="VariableDeclarationUsageDistance"/><!--方法参数之间的空格--><modulename="MethodParamPad"><property name="tokens"
value="CTOR_DEF,LITERAL_NEW,METHOD_CALL,METHOD_DEF,SUPER_CTOR_CALL,ENUM_CONSTANT_DEF,RECORD_DEF"/></module><!--符号面前不允许空格--><modulename="NoWhitespaceBefore"><property name="tokens"
value="COMMA,SEMI,POST_INC,POST_DEC,DOT,LABELED_STAT,METHOD_REF"/><property name="allowLineBreaks" value="true"/></module><!--括号填充的空格--><modulename="ParenPad"><property name="tokens"
value="ANNOTATION,ANNOTATION_FIELD_DEF,CTOR_CALL,CTOR_DEF,DOT,ENUM_CONSTANT_DEF,EXPR,LITERAL_CATCH,LITERAL_DO,LITERAL_FOR,LITERAL_IF,LITERAL_NEW,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_WHILE,METHOD_CALL,METHOD_DEF,QUESTION,RESOURCE_SPECIFICATION,SUPER_CTOR_CALL,LAMBDA,RECORD_DEF"/></module><!--运算符前的空格--><modulename="OperatorWrap"><property name="option" value="NL"/><property name="tokens"
value="BAND,BOR,BSR,BXOR,DIV,EQUAL,GE,GT,LAND,LE,LITERAL_INSTANCEOF,LOR,LT,MINUS,MOD,NOT_EQUAL,QUESTION,SL,SR,STAR,METHOD_REF,TYPE_EXTENSION_AND "/></module><!--注解位置--><modulename="AnnotationLocation"><property name="id" value="AnnotationLocationMostCases"/><property name="tokens"
value="CLASS_DEF,INTERFACE_DEF,ENUM_DEF,METHOD_DEF,CTOR_DEF,RECORD_DEF,COMPACT_CTOR_DEF"/></module><!--注解位置--><modulename="AnnotationLocation"><property name="id" value="AnnotationLocationVariables"/><property name="tokens" value="VARIABLE_DEF"/><property name="allowSamelineMultipleAnnotations" value="true"/></module><!----><modulename="NonEmptyAtclauseDescription"/><modulename="InvalidJavadocPosition"/><modulename="JavadocTagContinuationIndentation"/><!--命名校验--><modulename="AbbreviationAsWordInName"><property name="ignoreStatic" value="false"/><property name="allowedAbbreviationLength" value="1"/><property name="allowedAbbreviations" value="XML,URL,TRS,VO,DTO,PKI,MAC,IMEI,IMSI"/></module><modulename="LocalVariableName"><property name="format"
value="^[a-z][a-z0-9]*([A-Z][a-z0-9]+)*(DO|DTO|VO|DAO|BO|DOList|DTOList|VOList|DAOList|BOList|X|Y|Z|UDF|UDAF|[A-Z])?$"/><property name="allowOneCharVarInForLoop" value="true"/><message key="name.invalidPattern" value="局部变量命名 ''{0}'' 不满足lowerCaseCamel命名规范"/></module><modulename="MemberName"><property name="format"
value="^[a-z][a-z0-9]*([A-Z][a-z0-9]+)*(DO|DTO|VO|DAO|BO|DOList|DTOList|VOList|DAOList|BOList|X|Y|Z|UDF|UDAF|[A-Z])?$"/><message key="name.invalidPattern" value="成员变量命名 ''{0}'' 不满足lowerCaseCamel命名规范"/></module><modulename="MethodName"><message key="name.invalidPattern" value="方法命名 ''{0}'' 不满足lowerCaseCamel命名规范"/></module><modulename="PackageName"><message key="name.invalidPattern" value="包命名 ''{0}'' 不满足命名规范"/></module><modulename="ParameterName"><message key="name.invalidPattern" value="方法传参命名 ''{0}'' 不满足lowerCaseCamel命名规范"/></module></module></module>
点击加号,导入checkstyle.xml;
3、点击apply,点击ok;
4、点击选择刚才导入的checkstyle;
5、分别对类、包、项目进行检查可以发现代码中不规范的地方;
6、若无问题则显示Checkstyle found no promblems in the file(s);
此插件配置可以在自己练习时使用,不过与插件检测与maven检测有差异,推荐使用maven编译检测。
(二)添加依赖方式
1、将checkstyle.xml文件放在项目根目录下(或新建codestyle文件夹放里面);
2、在pom.xml中添加checkstyle依赖;
<!--检查代码编码规范,不符合规范将无法打包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.1.2</version><dependencies><dependency><groupId>com.puppycrawl.tools</groupId><artifactId>checkstyle</artifactId><!-- 上线项目中可能会换为${maven-checkstyle-plugin-version}--><version>8.36.2</version></dependency></dependencies><executions><execution><id>checkstyle-validation</id><phase>compile</phase><configuration><!-- 此处是checkstyle.xml文件放置位置,可根据实际位置进行修改--><configLocation>checkstyle.xml</configLocation><encoding>UTF-8</encoding><consoleOutput>true</consoleOutput><failOnViolation>true</failOnViolation></configuration><goals><goal>check</goal></goals></execution></executions></plugin>
3、项目写完后点击maven,点击compile编译项目;
4、查看编译信息,可以看到检查出来的问题;
5、根据提示对代码进行修改,直到检测出来所有代码没有问题。
版权归原作者 天天学爪娃 所有, 如有侵权,请联系我们删除。