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