01.CheckStyle代码检查工具

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

暂时省略

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值