Idea如何配置CheckStyle

一、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"?>
<!DOCTYPE module PUBLIC  "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
    "http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">


<module name="Checker">
    <property name="charset" value="UTF-8"/>
    <property name="fileExtensions" value="java"/>
    <!-- 文件长度不超过1500-->
    <module name="FileLength">
        <property name="max" value="1500"/>
    </module>
    <!-- TreeWalker Checks -->
    <module name="TreeWalker">
        <module name="SuppressWarningsHolder"/>
        <!--避免转义unicode字符-->
        <module name="AvoidEscapedUnicodeCharacters">
            <property name="allowEscapesForControlCharacters" value="true"/>
            <property name="allowByTailComment" value="true"/>
            <property name="allowNonPrintableEscapes" value="true"/>
        </module>
        <module name="NoLineWrap"/>
        <module name="OuterTypeFilename"/>
        <!-- import检查-->
        <!-- 检查是否从非法的包中导入了类 -->
        <module name="IllegalImport"/>
        <!-- 检查是否导入了多余的包 -->
        <module name="RedundantImport"/>
        <!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang4.import 与该类在同一个package-->
        <module name="UnusedImports"/>
        <!-- 注释检查 -->
        <!-- 检查方法和构造函数的javadoc -->
        <module name="JavadocType">
            <property name="allowUnknownTags" value="true"/>
            <message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/>
        </module>
        <!-- 检查方法的javadoc -->
        <module name="JavadocMethod">
            <property name="allowedAnnotations" value="Override, Test"/>
            <property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF "/>
            <message key="javadoc.missing" value="方法注释:缺少Javadoc注释。"/>
        </module>
        <!-- 检查方法的javadoc是否缺失-->
        <module name="MissingJavadocMethod">
            <property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF "/>
        </module>
        <!-- 检查类型的javadoc是否缺失-->
        <module name="MissingJavadocType"/>
        <module name="RequireEmptyLineBeforeBlockTagGroup"/>
        <module name="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>

        <!-- 方法名的检查 -->
        <module name="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>
        <!-- 方法的参数名 -->
        <module name="ParameterName"/>
        <!-- 常量名的检查(只允许大写),默认^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
        <module name="ConstantName"/>
        <!-- 检查long型定义是否有大写的“L-->
        <module name="UpperEll"/>
        <!-- 检查switch语句是否有default -->
        <module name="MissingSwitchDefault"/>
        <!-- 语法 -->
        <!-- String的比较不能用!=== -->
        <module name="StringLiteralEquality"/>
        <!-- 禁止使用System.out.println -->
        <module name="Regexp">
            <property name="format" value="System\.out\.println"/>
            <property name="illegalPattern" value="true"/>
        </module>

        <!--重载方法申明顺序-->
        <module name="OverloadMethodsDeclarationOrder"/>
        <!--变量声明和第一次使用之间的距离-->
        <module name="VariableDeclarationUsageDistance"/>

        <!--方法参数之间的空格-->
        <module name="MethodParamPad">
            <property name="tokens"
                value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
                    SUPER_CTOR_CALL, ENUM_CONSTANT_DEF, RECORD_DEF"/>
        </module>
        <!--符号面前不允许空格-->
        <module name="NoWhitespaceBefore">
            <property name="tokens"
                value="COMMA, SEMI, POST_INC, POST_DEC, DOT,
                    LABELED_STAT, METHOD_REF"/>
            <property name="allowLineBreaks" value="true"/>
        </module>
        <!--括号填充的空格-->
        <module name="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>

        <!--运算符前的空格-->
        <module name="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>

        <!--注解位置-->
        <module name="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>

        <!--注解位置-->
        <module name="AnnotationLocation">
            <property name="id" value="AnnotationLocationVariables"/>
            <property name="tokens" value="VARIABLE_DEF"/>
            <property name="allowSamelineMultipleAnnotations" value="true"/>
        </module>

        <!--        -->
        <module name="NonEmptyAtclauseDescription"/>

        <module name="InvalidJavadocPosition"/>

        <module name="JavadocTagContinuationIndentation"/>

        <!--命名校验-->
        <module name="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>
        <module name="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>
        <module name="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>
        <module name="MethodName">
            <message key="name.invalidPattern" value="方法命名 ''{0}'' 不满足lowerCaseCamel命名规范"/>
        </module>
        <module name="PackageName">
            <message key="name.invalidPattern" value="包命名 ''{0}'' 不满足命名规范"/>
        </module>
        <module name="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编译项目;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMt3aijM-1669456326580)(E:\doc\Java\Java学习\0TyporaImg\image-20221125102928048.png)]

4、查看编译信息,可以看到检查出来的问题;
在这里插入图片描述

5、根据提示对代码进行修改,直到检测出来所有代码没有问题。

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值