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

暂时省略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级架构师是如何设计一个系统的?

架构师如何设计系统&#xff1f; 系统拆分 通过DDD领域模型&#xff0c;对服务进行拆分&#xff0c;将一个系统拆分为多个子系统&#xff0c;做成SpringCloud的微服务。微服务设计时要尽可能做到少扇出&#xff0c;多扇入&#xff0c;根据服务器的承载&#xff0c;进行客户端负…

微信这个费用,终于降低了

大家好&#xff0c;我是小悟 这个费用降低了&#xff0c;这对于广大小程序开发者来说无疑是一个好消息。这一举措不仅可以降低开发者的成本&#xff0c;还有助于激发更多的创新和创业激情。 对于广大小程序开发者来说&#xff0c;这也是一个福音&#xff0c;因为他们可以降低开…

DMA技术在STM32中优化UART、SPI和I2C通信性能的研究与实现

DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;技术可以在STM32微控制器上优化UART、SPI和I2C等通信性能。DMA可以实现数据的高速传输&#xff0c;减轻CPU的负担&#xff0c;提高系统性能。在本篇文章中&#xff0c;我将探讨DMA技术在STM32中优化…

【计算机组成原理】

【第一章】计算机系统概述 【第二章】进程管理

RDMA编程实践-SEND-RECEICVE原语应用

RDMA编程实践 本文描述了RDMA编程过程中的SEND-RECEIVE双边原语的代码实现。包含多个版本&#xff0c;1、client向server发送消息&#xff0c;server回复client收到消息(ACK)&#xff0c;然后两边断开连接。2、server端循环等待客户端建立连接&#xff0c;client发送一次消息后…

Javaweb之SpringBootWeb案例员工管理之删除员工的详细解析

3.3 删除员工 查询员完成之后&#xff0c;我们继续开发新的功能&#xff1a;删除员工。 3.3.1 需求 当我们勾选列表前面的复选框&#xff0c;然后点击 "批量删除" 按钮&#xff0c;就可以将这一批次的员工信息删除掉了。也可以只勾选一个复选框&#xff0c;仅删除一…

超详细的 pytest 钩子函数 —— 之初始钩子和引导钩子来啦!

前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。 仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现 pyt…

PSP - 提取 UniRef 数据库搜索的 MSA 序列物种 (Species) 信息

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135702185 UniRef库&#xff1a;UniProt参考聚类&#xff08;UniRef&#xff09;的简称&#xff0c;提供了从UniProt知识库&#xff08;包括异构体…

[力扣 Hot100]Day7 接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 出处 思路 就是寻找“凹”形区间&#xff0c;找使得左右两端点为最大的两个值的最长区间。这里我分了两种情况&#xff0c;右边大于等于左边…

MySQL深度分页优化问题

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

RenderDoc 增加 DXBC to HLSL 的 shader viewer

目的 便于后续抓帧出来的 DXBC 转为 HLSL&#xff0c;提高可读性 原因 编写的原因&#xff0c;因为按照网上的大佬的BLOG&#xff0c;发现某个 etnlGD/HLSLDecompiler 上的工具使用上是有问题的 &#xff08;有可能是以前的 render doc 版本没有问题&#xff0c;而我现在是在…

KubeSphere平台使用

KubeSphere官网地址&#xff1a;https://kubesphere.io/zh/ KubeKey一键部署K8S集群&#xff1a;https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node&#xff08;初始化主节点&#xff09;、两台 work node&#xff08; joi…

SCI好看的配图-汇总

文章目录 图源&#xff1a;Sustainable Cities and Society【期刊】条形图2热力图-地图 图源&#xff1a;Sustainable Cities and Society【期刊】 引自&#xff1a;A machine learning-driven spatio-temporal vulnerability appraisal based on socio-economic data for COV…

如何编写一个好的测试用例?才能防止背黑锅

如何编写一个好的测试用例&#xff1f;才能防止背黑锅 什么是测试用例&#xff1f;一个好的测试用例包含什么&#xff1f;测试用例的编写思路总结 什么是测试用例&#xff1f; 在这之前&#xff0c;思考一个问题&#xff0c;下面这个简单的QQ登录页面&#xff0c;一共又多少条…

关于运维·关于Zabbix监控平台的面试点

目录 引言&#xff1a;明人不说暗话&#xff0c;今天分享几个在面试的时候常被问到关于Zabbix监控平台的面试点 1、zabbix的优点 2、zabbix的缺点 3、zabbix的监控模式 4、zabbix自定义监控怎么做 5、zabbix的自动发现功能 6、zabbix分布式监控有什么特点 引言&#xff1…

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130&#xff0c;总分380顺利考上哈尔滨工程大学&#xff0c;一年的努力终于换来最后的录取&#xff0c;期中复习有得有失&#xff0c;以下总结一下自己的复习经历&#xff0c;希望对大家有帮助&#xff0c;天道酬勤&#xff0c;加油&#xff01;专业课&…

入门设计者不容错过!5款网页原型设计工具推荐!

即时设计 即时设计是一种支持团队合作的原型设计工具&#xff0c;不限于设备和人群的使用&#xff0c;浏览器可以打开和使用。在即时设计中&#xff0c;您可以从0到1创建一个Web页面原型&#xff0c;具有钢笔、矩形、矢量编辑、轮廓、文本、色彩填充等设计功能&#xff0c;足以…

达梦数据库入门语法:从基础到进阶的指南

目录 博客前言&#xff1a; 达梦数据库语法介绍 一.创建表空间 1.图形化创建 2.语法创建 ​编辑​编辑 3.修改表空间参数 图形化修改 ​编辑​编辑 语法修改 4.设置加密算法、密码 二.创建用户 1.图形化 2.sql执行 ​编辑 3.授予权限 授予用户 DBA 权限 授予用户…

三、RHCE--时间服务器

三、RHCE--时间服务器 一、简介二、软件安装三、配置时间服务器客户端四、配置时间服务器服务端五、示例&#xff1a; 一、简介 NTP 是网络时间协议&#xff08;Network Time Protocol&#xff09;的简称&#xff0c;通过 udp 123 端口进行网络时钟同步。 Chrony是一个开源自由…

k8s---ingress对外服务(traefik)

目录 ingress的证书访问 traefik traefik的部署方式&#xff1a; deamonset deployment nginx-ingress与traefix-ingress相比较 nginx-ingress-controller ui访问 deployment部署 ingress的证书访问 ingress实现https代理访问: 需要证书和密钥 创建证书 密钥 secre…