当前位置: 首页 > news >正文

maven代码规范检查(checkstyle、findbugs)

maven代码规范检查

  • 前言
  • 一、使用checkstyle插件
    • 1. maven-checkstyle-plugin 介绍
    • 2. 接入方式
    • 3. 如何排除某个类、包下面的文件不进行检查
      • 使用suppressionsLocation
    • 4. 如何关闭
  • 二、使用findbugs插件
    • 1.findbugs-maven-plugin介绍
    • 2. 接入方式
    • 3. 如何排除某个类、包下面的文件不进行检查
      • 过滤类(常用的是这种)
      • 过滤包(尽量不要过滤整个包)
      • 过滤方法
      • 过滤异常

前言

很多时候我们的代码写的不规范,比如没缩进、参数间没空格、导入的包没用到没删除、方法很长没有进行拆分、 直接对方法参数进行了赋值分配等等不规范的操作或写法。

为了规范代码并提高代码的质量,以及扫描代码检测潜在的不合理代码,我们可以使用一些插件来进行代码扫描分析。

一、使用checkstyle插件

1. maven-checkstyle-plugin 介绍

maven-checkstyle-plugin 是 maven 提供的一个插件,用于扫描代码检测不合理需要改进的差代码,简单来说就是代码规范检查。

举个例子:

GitHub 就用它在提交和拉取请求时审核代码库的一致性(例如缩进规则等)。GitHub 的 Actions 等 CI/CD 系统中就使用了这个东西,当你在 GitHub 上 fork 了一个开源项目,然后修改一些代码后给原项目作者提了一个 PR 请求,原作者同意后GitHub CI就会用这个东西构建检查代码缩进和代码规范是否有不合理的地方。

2. 接入方式

在 pom.xml 中引入如下插件依赖:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.2.1</version></plugin></plugins>
</build>

maven-checkstyle-plugin 自带两套扫描代码的规则,一套是 Sun 定义的 sun_checks.xml ,一套是由谷歌定义的 google_checks.xml。
像上面那样不指定扫描规则,则默认采用 sun_checks.xml ,
如果你想指定使用 google_checks.xml 规则扫描代码可以像下面这样引入插件依赖:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.2.1</version><configuration><configLocation>google_checks.xml</configLocation></configuration></plugin></plugins>
</build>

如果你想采用自定义的扫描规则,请在你的 pom.xml 同级目录下新建 checkstyle.xml 文件并在其中配置你的规则。
然后修改 pom.xml 中 maven-checkstyle-plugin 插件的 configLocation 配置 checkstyle.xml ,就像上面的 google_checks.xml 一样。

网上有很多自定义的 checkstyle.xml 规则,例如:

  • 较完整checkstyle.xml及说明

3. 如何排除某个类、包下面的文件不进行检查

使用suppressionsLocation

在这里插入图片描述
您必须使用一个明确的suppressions.xml配置文件并从您的配置中激活它:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.1.1</version><configuration><!-- checkstyle自定义文件位置  -><configLocation>config/checkStyle/checkstyle.xml</configLocation><!-- 不需要检测的类的文件的位置  -><suppressionsLocation>config/checkStyle/suppressions.xml</suppressionsLocation>[...]

用于排除目标文件夹的禁止文件如下所示:

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN""https://checkstyle.org/dtds/suppressions_1_2.dtd"><!-- files  代表你想对项目中的哪个类进行过来  ->
<!-- checks 代表你想过滤掉哪种检查 ->
<!-- 以下为例子 ->
<suppressions><suppress files="[/\\]target[/\\]" checks=".*" /><suppress files="com.mapper" checks="Javadoc" /><suppress files="com.dto" checks="Javadoc" /><suppress files="HelloResource.java" checks="AvoidStarImport" /><suppress files="[\\/]com[\\/]sgy[\\/]ssm[\\/]" checks="[a-zA-Z0-9]*"/><suppress files="[\\/]resources[\\/]" checks="[a-zA-Z0-9]*"/><suppress files=".*(Switch|Enum|ErrorCode).java" checks="[a-zA-Z0-9]*"/>
</suppressions>

4. 如何关闭

第一种:直接注释掉或者删除maven-checkstyle-plugin依赖

第二种.配置skip 设置为true
在 pom.xml 文件中为特定的插件或目标设置 skip 属性。当设置为 true 时,Maven 将跳过该插件或目标的执行。

以下是禁用checkstyle在pom中定义如下:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>2.9.1</version><configuration><skip>true</skip></configuration></plugin></plugins>
</build>

参考:
【1】提升代码质量,使用插件对 java 代码进行扫描检查分析
https://blog.csdn.net/qq_33697094/article/details/129709360
【2】在Maven Checkstyle插件报告中排除类
https://www.thinbug.com/q/2362652
【3】代码规范:项目中引入checkstyle并排除需要扫描的包
https://blog.csdn.net/u013066244/article/details/116996518
【4】【maven配置文件系列】FLINK Suppressions.xm
https://blog.csdn.net/wang2leee/article/details/132536908

二、使用findbugs插件

1.findbugs-maven-plugin介绍

FindBugs是一个静态分析工具,它将字节码(因此需要先编译)与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。简而言之,FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。比较典型的,如引用了空指针(null pointer), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许直到运行时才发现…所以当我们用findbugs除掉了这些典型的bug后,我们系统的稳定度将会上一个新的台阶。

另一方面,对于一个初入职场的新coder而言,适应findbugs不仅能减少bug的数量,更有利于提升编码能力,写出高质量的代码,从而养成较好的编程习惯。

2. 接入方式

在 pom.xml 引入如下插件依赖:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.2.1</version></plugin></plugins>
</build>

3. 如何排除某个类、包下面的文件不进行检查

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-checkstyle-plugin</artifactId><version>3.2.1</version><configuration><!--findbugs在此处配置需要忽略的--><excludeFilterFile>conf/findbugs-exclude-filter.xml</excludeFilterFile></configuration> </plugin></plugins>
</build>

对于findbugs-exclude-filter.xml的四种过滤配置
在这里插入图片描述

过滤类(常用的是这种)

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><Class name="com.missxxxx.proscenium.plugin.misconf.ProsceniumConfig" /></Match>
</FindBugsFilter>

过滤包(尽量不要过滤整个包)

老项目在接入findbugs时,尽量不要过滤整个包,而是把现有的类逐个过滤即可,这样不妨碍新增加的文件参与扫描

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><Package name="com.missxxxx.proscenium.plugin.misconf" /></Match>
</FindBugsFilter>

过滤方法

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><Class name="com.missxxxx.proscenium.service.CartShowServiceImpl" /><Method name="getResultData"></Method></Match>
</FindBugsFilter>

过滤异常

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><!--装箱后拆箱紧接着装箱,忽略不处理 --><!-- Boxed value is unboxed and then immediately reboxed--><Package name="~.*" /><Bug pattern="BX_UNBOXING_IMMEDIATELY_REBOXED" />
</Match>
</FindBugsFilter>

如果有多个包/类/方法需要过滤,就加多个Match标签即可。

参考:
【1】Findbugs maven 插件使用
https://blog.csdn.net/qq_34595352/article/details/117038779

http://www.lryc.cn/news/292431.html

相关文章:

  • 妙用Java反射,让代码更加优雅
  • 实习日志10
  • 配置alias(设置别名@)
  • 【动态规划】【数学】1388. 3n 块披萨
  • CS144--Chapter0--wsl2+docker环境搭建
  • MGRE实验报告二
  • 算法设计与分析实验:最短路径算法
  • 共用体与枚举法,链表的学习
  • SG2520CAA汽车用晶体振荡器
  • 使用pip将第三方依赖包下载到本地指定位置
  • C语言探索:水仙花数的奥秘与计算
  • 2024年人工智能应用与先进制造科学国际学术会议(ICAIAAMS 2024)
  • 计算机图形学 实验
  • React + react-device-detect 实现设备特定的渲染
  • 文献速递:肿瘤分割----基于卷积神经网络的系统,用于前列腺癌[68Ga]Ga-PSMA PET全身图像的全自动分割
  • 2024 IC FPGA 岗位 校招面试记录
  • Linux 命令 —— top
  • 【Docker】使用VS创建、运行、打包、部署.net core 6.0 webapi
  • 抖音短视频矩阵营销系统源头独立开发搭建
  • Springboot使用数据库连接池druid
  • Springboot-前后端分离——第三篇(三层架构与控制反转(IOC)-依赖注入(DI)的学习)
  • Open CASCADE学习|曲面上一点的曲率及切平面
  • CentOS 8最小安装和网络配置
  • 【代码随想录-链表】环形链表 II
  • Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型
  • 银行数据仓库体系实践(17)--数据应用之营销分析
  • Linux一键部署telegraf 实现Grafana Linux 图形展示
  • C/C++ C++入门
  • 【后端】乐观锁和悲观锁
  • 软件工程知识梳理1-可行性研究