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

news2025/3/14 4:39:28

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.coloradmin.cn/o/1427141.html

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

相关文章

ENSP路由器打不开,查看virtualBox,故障机是 AR_Base

AR_Base错误代码为&#xff1a;Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT). 参考virtualBox解决不能为虚拟电脑 AR_Base 打开一个新任务. Raw-mode is unavailable courtesy of Hyper-V. win11亲测有用。_不能为虚拟电脑ar_base打…

day37WEB攻防-通用漏洞XSS跨站权限维持钓鱼捆绑浏览器漏洞

目录 XSS-后台植入 Cookie&表单劫持&#xff08;权限维持&#xff09; 案例演示 XSS-Flash 钓鱼配合 MSF 捆绑上线 1、生成后门 2、下载官方文件-保证安装正常 3、压缩捆绑文件-解压提取运行 4、MSF 配置监听状态 5、诱使受害者访问 URL-语言要适当 XSS-浏览器网马…

Redis核心技术与实战【学习笔记】 - 6.Redis 的统计操作处理

1.前言 在 Web 业务场景中&#xff0c;我们经常保存这样一种信息&#xff1a;一个 key 对应了一个数据集合。比如&#xff1a; 手机 APP 中的每天用户登录信息&#xff1a;一天对应一系列用户 ID。电商网站上商品的用户评论列表&#xff1a;一个商品对应了一些列的评论。用户…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…

分布式事务(四)——TCC补偿模式解决方案

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 《分布式事务&#xff08;三&#xff09;—— 两阶段提交解决方案&#xff08;2PC&#xff09;》 一、常见分布式事务解决…

某航空网站promise异步定位js逆向解析

本次目标地址如下&#xff0c;使用base64解码获得 aHR0cHM6Ly9pbnQtZXQueGlhbWVuYWlyLmNvbS9mbGlnaHRzL3Jlc3VsdHM 打开网址&#xff0c;抓包分析后&#xff0c;发现响应结果在该请求中&#xff1a; 我们跟栈进去查找&#xff0c;从右边的堆栈调用过程中发现&#xff0c;这是典…

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台&#xff1a; 1、下载appuploader工具&#xff1a;Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

通过18次止损,我终于领悟到交易的真谛

截断亏损让利润奔跑&#xff0c;这是操作的基础&#xff0c;也是操作的大体思路。了解并接受这个市场认识&#xff0c;基本上就把握住了市场的门道。至于市场走势&#xff0c;是无法准确预测的。 在交易的第一年&#xff0c;我处于一种懵懂的状态&#xff0c;对市场知之甚少。第…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例

# 1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。…

【以太网】VSC8512XJG-03、VSC8512XJG-02、VSC8514XMK-14、VSC8514XMK-11千兆以太网(GE)PHY

一、VSC8512 12 Port GbE Cu PHY with 4 Dual Media ports[12端口GBE Cu PHY&#xff0c;带4个双介质端口] 概述 VSC8512采用单一封装的12端口千兆以太网&#xff08;GE&#xff09;铜线PHY解决方案。VSC8512采用了Microchip最新的65纳米Simpliphy™技术&#xff0c;是业界最具…

猫什么时候发腮?猫咪发腮指南!这些生骨肉冻干发腮效果好

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中&#xff0c;发腮是一项重要的体征&#xff0c;也是猫咪成熟的标志。主人需要在适龄的年龄段加强营养补给&#xff0c;可以让让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;不要错失最佳发腮期。那么&#xff0c;什么时…

第八篇:node模版引擎Handlebars及他的高级用法(动态参数)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 引言&#xff1a; &#x1f…

OpenCV学习记录——边缘检测

文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时&#xff0c;通常需要将识别到的物体边界提取出来&#xff0c;从而帮助我们实现目标检测&#xff0c;这就需要用到边缘检测&#xff0c;例如人脸识别和运动目标的检测都需要先进行…

Flutter 应用服务:主题、暗黑、国际化、本地化 - app_service库

Flutter应用服务 主题、暗黑、国际化、本地化 app_service库 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/det…

Nginx 多项目部署,vue刷新404 解决方案

网上找的资料大多都解决不了&#xff0c;废话不多说直接告诉你解决方法。 环境是 TP6 VUE前端官网 VUE 后台管理 部署 两个项目 刷新 404 解决方案 Nginx 配置 直接贴图 如果解决了&#xff0c;给我顶起来&#xff0c;让更多人 快速的解决。

Arduino 推出基于乐鑫 ESP32-S3 的 STEM 教育机器人

Arduino Alvik 是 Arduino Education 推出的一款新型机器人&#xff0c;可作为一种跨学科工具&#xff0c;为当前教育和未来机器人世界筑起连接的桥梁。Hackster 的 Gareth Halfacree 表示&#xff1a;“Alvik 的设计灵感来自 Arduino 简化复杂技术的理念&#xff0c;同时它也 …

上海市事业编报名照不能成功上传的原因

2024年上海市事业编报名照需要根据以下要求生成&#xff1a; 1、近期6个月&#xff0c;免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式&#xff0c;大小在100KB以下 4、照片像素大小&#xff0c;宽度75至150像素内&#xff0c;高度为105至210像素内 5…

gRPC - Google远程过程调用(Google Remote Procedure Call,gRPC)

什么是gRPC&#xff1f; Google远程过程调用&#xff08;Google Remote Procedure Call&#xff0c;gRPC&#xff09;是基于HTTP 2.0传输层协议承载的高性能开源RPC软件框架&#xff0c;为管理和配置网络设备提供了一种API接口设计的方法。gRPC提供了多种编程语言&#xff0c;如…

Linux之系统安全与应用续章

目录 一. PAM认证 1.2 初识PAM 1.2.1 PAM及其作用 1.2.2 PAM认证原理 1.2.3 PAM认证的构成 1.2.4 PAM 认证类型 1.2.5 PAM 控制类型 二. limit 三. GRUB加密 /etc/grub.d目录 四. 暴力破解密码 五. 网络扫描--NMAP 六. 总结 一. PAM认证 1.2 初识PAM PAM是Linux系…