Findbugs maven 插件使用

article/2025/9/13 15:57:31

Findbugs maven 插件使用

FindBugs™手册 http://findbugs.sourceforge.net/manual/index.html

0、概述

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

一、接入方式

pom.xml 添加插件plugin

<build><plugins><!-- findbugs插件 --><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>3.0.4</version><configuration><!-- 设置分析工作的等级,可以为min、default和max --><effort>default</effort><!-- Low、Medium和High (Low最严格) --><threshold>Medium</threshold><failOnError>true</failOnError><includeTests>true</includeTests><!--findbugs需要忽略的错误的配置文件--><excludeFilterFile>findbugs/findbugs-exclude-filter.xml</excludeFilterFile></configuration> <executions><execution><id>run-findbugs</id><!-- 在package 阶段触发执行findbugs检查,比如执行 mvn clean package --><phase>package</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</build>

findbugs-exclude-filter.xml 内容示例

<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter><Match><Class name="~.*\.(model|entity|vo)\..*" /><Method name="~(get.*|set.*)" /><!-- <Bug pattern="EI_EXPOSE_REP" /> --><Bug code="EI,EI2" /></Match><Match><Class name="~.*\.Authorization" /><Bug code="EI,EI2" /></Match>
</FindBugsFilter>

可以添加findbugs检查规则文件来使用用户自己的规则

<configuration>  <excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>  <includeFilterFile>findbugs-include.xml</includeFilterFile>  
</configuration>  

二、如何使用

方式一、在控制台中执行打包命令

mvn 命令

mvn clean package // 只有打包才触发findbugs扫码,由上面的配置设定。

mvn findbugs:help 查看findbugs插件的帮助
mvn findbugs:check 检查代码是否通过findbugs检查,如果没有通过检查,检查会失败,但检查不会生成结果报表
mvn findbugs:findbugs 检查代码是否通过findbugs检查,如果没有通过检查,检查不会失败,会生成结果报表保存在target/findbugsXml.xml文件中
mvn findbugs:gui 检查代码并启动gui界面来查看结果

方式二、使用IntelliJ IDEA的maven工具(其他IDE用户忽略)

在这里插å¥å›¾ç‰‡æè¿°

如果出现下面的信息,说明findbugs没有发现bug,打包成功。(上图是演示 打包失败的案例)

[INFO] <<< findbugs-maven-plugin:3.0.4:check (run-findbugs) < :findbugs @ pmp-proscenium <<<
[INFO] 
[INFO] 
[INFO] --- findbugs-maven-plugin:3.0.4:check (run-findbugs) @ pmp-proscenium ---
[INFO] BugInstance size is 0
[INFO] Error size is 0
[INFO] No errors/warnings found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.627 s
[INFO] Finished at: 2019-04-09T21:38:35+08:00
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "nexus" could not be activated because it does not exist.Process finished with exit code 0

三、bug详情查看

如果在打包的过程中发现bug,则控制台会输出bug的数量和查看bug详情的方式。下面是开发中的日志样例:

[INFO] To see bug detail using the Findbugs GUI, use the following command "mvn findbugs:gui"[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.037 s
[INFO] Finished at: 2019-04-09T18:50:48+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:findbugs-maven-plugin:3.0.4:check (run-findbugs) on project pmp-proscenium: failed with 1 bugs and 0 errors  -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
  • 上面的日志提示,如果想查看bug详情,可以使用如下命令:“mvn findbugs:gui”
  • 打开一个终端,切换到项目的根目录下,执行"mvn findbugs:gui",会出现如下的窗口。

在这里插å¥å›¾ç‰‡æè¿°

  • 按照bug详情中的解释,修改相应的代码。
  • 注意点:如果bug数太多,有些bug根本不需要findbugs扫码。可以通过配置文件的方式过滤掉相应的包、类 、方法和异常 。下面介绍。

四、忽略指定的包、类、类中的方法

步骤一、在pom.xml中 增加配置。

<!-- findbugs插件 -->
<plugins><build><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>3.0.5</version><configuration>...<excludeFilterFile>conf/findbugs-exclude-filter.xml</excludeFilterFile></configuration><executions><execution>...</execution></executions></plugin></plugins>
</build>

步骤二、增加配置文件,用于忽略指定的包、类、方法、异常。

  1. 新建conf/findbugs-exclude-filter.xml 文件,路径与src同级。

在这里插å¥å›¾ç‰‡æè¿°

  1. 配置文件的用法如下:
    详细的过滤规则可以参见官网: http://findbugs.sourceforge.net/manual/filter.html

过滤类:

<?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>

过滤异常:

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

<?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标签即可。

五、参考链接:

官网:https://gleclaire.github.io/findbugs-maven-plugin/usage.html
bug描述:http://findbugs.sourceforge.net/bugDescriptions.html
https://www.cnblogs.com/xuehanyu/p/4520816.html
https://blog.csdn.net/jokes000/article/details/7872849
https://blog.csdn.net/rainbow702/article/details/54138155

ven-plugin/usage.html
bug描述:http://findbugs.sourceforge.net/bugDescriptions.html
https://www.cnblogs.com/xuehanyu/p/4520816.html
https://blog.csdn.net/jokes000/article/details/7872849
https://blog.csdn.net/rainbow702/article/details/54138155

本文原链接:https://blog.csdn.net/so_geili/article/details/89169845


http://chatgpt.dhexx.cn/article/a2NrxWkU.shtml

相关文章

检查代码质量的插件Findbugs使用说明

一、简介 Findbugs是一个静态分析工具&#xff0c;它检查类或者jar文件&#xff0c;将字节码与一组缺陷模式进行对比以发现可能的问题。利用这个工具可以在不实际运行程序的情况下对软件进行分析。可以帮助改进代码质量。Findbugs提供了方便操作的可视化界面&#xff0c;同时也…

Findbugs的使用

转载请注明出处&#xff1a;http://blog.csdn.net/feibendexiaoma/article/details/72821781前言 Findbugs很多人都并不陌生&#xff0c;Eclipse中有插件可以帮助查找代码中隐藏的bug&#xff0c;IDEA中也有这款插件。这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找…

android studio findbugs 过滤,Android Studio中使用FindBugs

1.什么是FindBugs 一句话简单理解就是&#xff1a;是一个工具&#xff0c;可以用它自动帮你找出代码中潜在的BUG。当然事实并不一定总是如此&#xff0c;也有很多它找不出来的地方。下面将直接介绍如何在Android Studio中的简单使用。有兴趣的童鞋可以自己去了解了解&#xff0…

FindBugs插件

官网 FindBugs官网&#xff1a;http://findbugs.sourceforge.net/ 插件安装 点击settings---->plugins---->Browse repositories 搜索框输入FindBugs-IDEA并点击右侧Install按钮 安装完毕后重启idea&#xff0c;发现左下角多了一个FindBugs图标 插件使用 在被检查文…

eclipse常用插件之FindBugs

1、简介 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件&#xff0c;将字节码与一组缺陷模式进行对比从而发现代码缺陷&#xff0c;完成静态代码分析。FindBugs既提供可视化 UI 界面&#xff0c;同时也可以作为 Eclipse插件使…

php findbugs,findBugs插件

现在使用Java进行开发的软件已经很多了&#xff0c;那么我们在使用Java开发的时候&#xff0c;是不是会遇到各种各样的错误了&#xff0c;有的错误隐藏着&#xff0c;有的错误你发现了&#xff0c;可以修改&#xff0c;那没有发现的错误就令人担忧了&#xff01;小编这款插件就…

软件测试实验 FindBugs

1.配置 FindBugs 打开 Eclipse&#xff0c;通过【Window -> Preferences】下【Java -> FindBugs】查看 FindBugs的 配置情况。问题: 这里可以配置 FindBugs的哪些特性&#xff1f; 选择导入的项目&#xff0c;通过【Window -> Preferences】下【Java -> FindBugs…

Findbug使用指南

Findbug使用指南 findbugs是一个开源的eclipse 代码检查工具&#xff1b;它可以简单高效全面地帮助我们发现程序代码中存在的bug&#xff0c;bad smell&#xff0c;以及潜在隐患。针对各种问题&#xff0c;它并且提供了简单的修改意见供我们重构时进行参考&#xff1b; 通过使…

findbugs用法教程

代码分析工具FindBugs详细配置使用教程 一&#xff0c;关于FindBugs (1) FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具&#xff0c;它检查类或者 JAR 文件&#xff0c;将字节码与一组缺陷模式进行对比以发现可能的问题(先对编译后的class进行扫描&#xff0c;…

自动找Bug/插件-代码静态检查findbugs-idea安装以及使用

目录 简介 IDEA安装FindBugs Findbugs配置 配置排除一些类 扫描级别 IDEA中使用FindBugs: 一些常见错误 补充 简介 Findbugs是一个静态分析工具&#xff0c;它检查类或者JAR 文件&#xff0c;将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器&…

Elasticsearch安装IK分词器、配置自定义分词词库

一、分词简介1、单字分词&#xff1a;2、二分法分词&#xff1a;3、词库分词&#xff1a; 二、配置IK中文分词器三、配置自定义分词拓展词库 一、分词简介 在Elasticsearch中&#xff0c;假设搜索条件是“华为手机平板电脑”&#xff0c;要求是只要满足了其中任意一个词语组合…

Elasticsearch 英文分词 中文分词

对于倒排索引来说&#xff0c;很重要的一件事情就是需要对文本进行分词&#xff0c;经过分词可以获取情感、词性、质性、词频等等的数据。 Elasticsearch 分词工作原理 在 Elasticsearch 中进行行分词的需要经过分析器的3个模块&#xff0c;字符过滤器将文本进行替换或者删除&…

【ElasticSearch】分词器(ElasticSearchIK分词器)

1. 分词器介绍 •IKAnalyzer 是一个开源的&#xff0c;基于java语言开发的轻量级的中文分词工具包•是一个基于Maven构建的项目•具有60万字/秒的高速处理能力•支持用户词典扩展定义 2. ik 分词器安装 IK 分词器安装 3. 分词器的使用 IK分词器有两种分词模式&#xff1a;ik…

ElasticSearch中文分词,看这一篇就够了

写在前面&#xff1a;我是「且听风吟」&#xff0c;目前是某上市游戏公司的大数据开发工程师&#xff0c;热爱大数据开源技术&#xff0c;喜欢分享自己的所学所悟&#xff0c;现阶段正在从头梳理大数据体系的知识&#xff0c;以后将会把时间重点放在Spark和Flink上面。 如果你…

Ik分词器(自定义分词-mysql)

引言&#xff1a;ik分词器的分词范围不够广泛。某些特定行业的专业用语分词能力就不够了&#xff0c;此时就需要自定义分词&#xff0c;与停顿词。 1、下载ik分词器源码 git地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases?page2 下载对应的…

分词器详解

在全文搜索&#xff08;Fulltext Search&#xff09;中&#xff0c;**词&#xff08;Term&#xff09;**是一个搜索单元&#xff0c;表示文本中的一个词&#xff0c;**标记&#xff08;Token&#xff09;**表示在文本字段中出现的词&#xff0c;由词的文本、在原始文本中的开始…

ES-分词器

简介 分词器是es中的一个组件&#xff0c;通俗意义上理解&#xff0c;就是将一段文本按照一定的逻辑&#xff0c;分析成多个词语&#xff0c;同时对这些词语进行常规化的一种工具&#xff1b;ES会将text格式的字段按照分词器进行分词&#xff0c;并编排成倒排索引&#xff0c;…

IK分词器

IK分词器是ES的一个插件&#xff0c;主要用于把一段中文或者英文的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术"会被分为"我…

Elasticsearch连续剧之分词器

目录 一、前言二、默认分词器三、IK分词器1.主要算法2.安装IK分词器2.1 关闭es服务2.2 上传ik分词器到虚拟机2.3 解压2.4 启动ES服务2.5 测试分词器效果2.6 IK分词器词典 四、拼音分词器1.安装2.测试分词效果 五、自定义分词器1.创建自定义分词器2.测试 一、前言 ES文档的数据…

jieba分词

一、jieba简介 jieba库是一款优秀的 Python 第三方中文分词库&#xff0c;jieba 支持三种分词模式&#xff1a;精确模式、全模式和搜索引擎模式&#xff0c;下面是三种模式的特点。 精确模式&#xff1a; 试图将语句最精确的切分&#xff0c;不存在冗余数据&#xff0c;适合做…