文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Idea如何配置CheckStyle

2023-09-22 06:58

关注

一、CheckStyle简介

CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是枯燥的任务中解脱出来。

CheckStyle检验的主要内容为:

二、CheckStyle配置教程

checkstyle配置有两种方式,第一种为安装插件,第二种为添加依赖,推荐使用第二种。

(一)安装插件方式

安装CheckStyle-IDEA插件,安装好后重启idea;

在这里插入图片描述

给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;
在这里插入图片描述

点击apply,点击ok;
在这里插入图片描述

点击选择刚才导入的checkstyle;
在这里插入图片描述

分别对类、包、项目进行检查可以发现代码中不规范的地方;
在这里插入图片描述

若无问题则显示Checkstyle found no promblems in the file(s);

此插件配置可以在自己练习时使用,不过与插件检测与maven检测有差异,推荐使用maven编译检测。

(二)添加依赖方式

将checkstyle.xml文件放在项目根目录下(或新建codestyle文件夹放里面);

在pom.xml中添加checkstyle依赖;

<plugin>    <groupId>org.apache.maven.pluginsgroupId>    <artifactId>maven-checkstyle-pluginartifactId>    <version>3.1.2version>    <dependencies>        <dependency>            <groupId>com.puppycrawl.toolsgroupId>            <artifactId>checkstyleartifactId>                        <version>8.36.2version>        dependency>    dependencies>    <executions>        <execution>            <id>checkstyle-validationid>            <phase>compilephase>            <configuration>                                <configLocation>checkstyle.xmlconfigLocation>                <encoding>UTF-8encoding>                <consoleOutput>trueconsoleOutput>                <failOnViolation>truefailOnViolation>            configuration>            <goals>                <goal>checkgoal>            goals>        execution>    executions>plugin>

项目写完后点击maven,点击compile编译项目;

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

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

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

来源地址:https://blog.csdn.net/m0_58969296/article/details/128054864

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯