CheckStyle的配置使用以及maven整合CheckStyle

1. 安装

  1. idea插件市场搜索checkStyle选择安装

在这里插入图片描述

  1. 重启idea使插件生效
    重启idea
    在这里插入图片描述

2. 配置和使用

  • 本地导入: 一般放在父类根目录下中。

  • cos导入:统一维护一份checkStyle文件,及时相应修改后的校验标准。

    **checkStyle文件已放在文件末尾

2.1 配置

  1. 打开idea设置界面 , 以此点击以下按钮

在这里插入图片描述

  1. 选择本地的checkStyle文件

在这里插入图片描述

  1. 导入成功,点击应用
  • 经测试,这里提供的最新版checkStyle文件,已经支持最新版插件。

2.2 使用

  • 检查单个文件

    右键选中Check Current File , 开始检验
    在这里插入图片描述

如下图所示, 已经检查出两个问题 , 表示类里面不要写 System.out.println这种输出语句

在这里插入图片描述

  • 其他检查方式

在这里插入图片描述

从上至下依次是检查 当前类 , 当前model, 当前project, 所有修改的类, 最近修改的类

2.3 全局使用

以上是单个项目设置checkStyle的方式 , 若给所有项目设置checkStyle, 按照一下方式打开, 其余操作和以上步骤一样。

在这里插入图片描述

2.4 cos导入CheckStyle

  • checkStyle cos地址:
  • 设置方式如下

在这里插入图片描述

2.5 配置maven

父类模块下新建style文件夹

在这里插入图片描述

pom文件中添加插件

<build>
    <plugins>
        <plugin>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>2.17</version>
            <executions>
                <execution>
                    <id>verify</id>
                    <phase>verify</phase>
                    <configuration>
                        <configLocation>style/checkstyle.xml</configLocation>
                        <encoding>UTF-8</encoding>
                        <consoleOutput>true</consoleOutput>
                        <failsOnError>true</failsOnError>
                        <includeTestSourceDirectory>false</includeTestSourceDirectory>
                    </configuration>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

idea设置

自动引入import.*包问题

原因有二:

    1. 是它有可能会带来名字冲突,有时候甚至会使我们的程序莫名其妙的出问题,
    1. 这样的导入方式,导致引入不必要的包,使得类的体积变大

在这里插入图片描述

依次点击settings -> Editor -> Code Style -> Java

  • 以下选中的值默认为5和3 , 现修改为500和300

在这里插入图片描述

  • 设置完毕后, 按下ctr+alt+o可修改对应的类的 '.*'问题
  • 也选中项目, 右键 , 选中Optimize Imports , 优化整个项目的引入 , 可删除无用的引入 和将’.*'转化为单个引入

在这里插入图片描述

未完待续

idea设置javadoc模板

  1. 按照以下操作,里面填入*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0HyTRfA-1618200685431)(D:\JiePing\Snipaste_2021-04-09_17-42-42.png)]

  1. 填入模板,设置参数

    *
     * @description
     * $VAR1$
     * @return $returns$
     * @author chenyunchang
     * @date $date$ $time$
     */
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qs7xrLjR-1618200685432)(D:\JiePing\Snipaste_2021-04-09_17-59-57.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqxhtGtm-1618200685433)(D:\JiePing\Snipaste_2021-04-09_18-00-38.png)]

  • VAR1:

    groovyScript("     def result='';       def params=\"${_1}\".replaceAll('[\\[|\\]|\\s]', '').split(',').toList();        for(i = 0; i < params.size(); i++) {                if(i!=0)result+= ' * ';                 result+='@param ' + params[i] + ((i < (params.size() - 1)) ? '\n' + '\t' : '');        };         return result", methodParameters())
    
  • date: date(“yyyy-MM-dd HH:mm:ss”);

  • return:

    groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split('<').toList(); for(i = 0; i < params.size(); i++) {if(i!=0){result+='<';};  def p1=params[i].split(',').toList();  for(i2 = 0; i2 < p1.size(); i2++) { def p2=p1[i2].split('\\\\.').toList();  result+=p2[p2.size()-1]; if(i2!=p1.size()-1){result+=','}  } ;  };  return result", methodReturnType())
    

设置table键空格数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTtLI85t-1618200685433)(D:\JiePing\Snipaste_2021-04-09_18-28-20.png)]

checkStyle文件

 <?xml version="1.0"?>
<!DOCTYPE module PUBLIC
       "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
       "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!--checkStyle -->
<module name="Checker">

   <!-- 检查文件是否以一个空行结束 -->
   <module name="NewlineAtEndOfFile"/>

   <!-- 文件长度不超过1500-->
   <module name="FileLength">
       <property name="max" value="1500"/>
   </module>

   <!-- 长度检查 -->
   <!-- 每行不超过140个字符 -->
   <module name="LineLength">
       <property name="fileExtensions" value="java"/>
       <property name="max" value="140"/>
       <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
   </module>
   <!--禁止打印e.printStackTrace错误信息-->
   <module name="RegexpSingleline">
       <property name="format" value="printStackTrace"/>
       <property name="message" value="Prohibit invoking printStackTrace in source code !"/>
   </module>

   <!-- 每个java文件一个语法树 -->
   <module name="TreeWalker">
       <!-- import检查-->
       <!-- 避免使用* -->
       <module name="AvoidStarImport">
           <property name="excludes" value="java.io,java.net,java.lang.Math"/>
           <!-- 实例;import java.util.*;.-->
           <property name="allowClassImports" value="false"/>
           <!-- 实例 ;import static org.junit.Assert.*;-->
           <property name="allowStaticMemberImports" value="true"/>
       </module>
       <!-- 检查是否导入了多余的包 -->
       <module name="RedundantImport"/>
       <!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package-->
       <module name="UnusedImports"/>

       <!-- 注释检查 -->
       <!-- 检查构造函数的javadoc -->
       <module name="JavadocType">
           <!--允许位置的tag如@date,@description-->
           <property name="allowUnknownTags" value="true"/>
           <message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/>
       </module>
       <!--方法注释-->
       <module name="JavadocMethod">
           <property name="tokens" value="METHOD_DEF"/>
           <!--允许get set 方法没有注释-->
<!--            <property name="allowMissingPropertyJavadoc" value="true"/>-->
           <message key="javadoc.missing" value="方法注释:缺少Javadoc注释。"/>
       </module>
       <!--校验方法的注释-->
       <module name="MissingJavadocMethod">
           <!--允许get set 方法没有注释-->
           <property name="allowMissingPropertyJavadoc" value="true"/>
           <!--允许构造方法没有注释-->
<!--            <property name="" value="true"/>-->
           <property name="scope" value="private"/>
       </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"/>


       <!-- 方法不超过100-->
       <module name="MethodLength">
           <property name="tokens" value="METHOD_DEF"/>
           <property name="max" value="100"/>
       </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语言规范,默认publicprotectedprivateabstractstaticfinaltransientvolatilesynchronizednativestrictfp -->
       <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="InnerAssignment"/>
       <!-- 检查是否有"魔术"数字 -->
       <module name="MagicNumber">
           <property name="ignoreNumbers" value="0, 1"/>
           <property name="ignoreAnnotation" value="true"/>
       </module>
       <!-- 检查switch语句是否有default -->
       <module name="MissingSwitchDefault"/>
       <!-- 检查是否有过度复杂的布尔表达式 -->
       <module name="SimplifyBooleanExpression"/>
       <!-- 检查是否有过于复杂的布尔返回代码段 -->
       <module name="SimplifyBooleanReturn"/>

       <!-- 类设计检查 -->
       <!-- 检查类是否为扩展设计l -->
       <!-- 检查只有private构造函数的类是否声明为final -->
       <module name="FinalClass"/>
       <!-- 语法 -->
       <!-- 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方法,排除以Application结尾命名的类 -->
       <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>

   </module>
</module>
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

意田天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值