文章目录

  • 0、概述
  • 一、接入方式
  • 二、如何使用
    • 方式一、在控制台中执行打包命令
    • 方式二、使用IntelliJ IDEA的maven工具(其他IDE用户忽略)
  • 三、bug详情查看
  • 四、忽略指定的包、类、类中的方法
    • 步骤一、在pom.xml中 增加配置。
    • 步骤二、增加配置文件,用于忽略指定的包、类、方法、异常。
  • 五、参考链接:

0、概述

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

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


一、接入方式

  在maven工程的pom.xml文件中增加如下插件:

<!-- findbugs插件 -->
<plugins><build><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>3.0.5</version><configuration><!-- 设置分析工作的等级,可以为Min、Default和Max --><effort>Low</effort><!-- Low、Medium和High (Low最严格) High只扫描严重错误。建议用Medium--><threshold>Medium</threshold><failOnError>true</failOnError><includeTests>true</includeTests></configuration><executions><execution><id>run-findbugs</id><!-- 在package(也可设为compile) 阶段触发执行findbugs检查,比如执行 mvn clean package --><phase>package</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</build>

二、如何使用

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

  在项目的根目录下执行如下命令:

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

方式二、使用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><!-- 设置分析工作的等级,可以为Min、Default和Max --><effort>Low</effort><!-- Low、Medium和High (Low最严格) High只扫描严重错误。建议用Medium--><threshold>Medium</threshold><failOnError>true</failOnError><includeTests>true</includeTests><!--findbugs需要忽略的错误的配置文件--><excludeFilterFile>conf/findbugs-exclude-filter.xml</excludeFilterFile></configuration><executions><execution><id>run-findbugs</id><!-- 在package(也可设为compile) 阶段触发执行findbugs检查,比如执行 mvn clean package --><phase>package</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</build>

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

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

  2. 配置文件的用法如下:
    详细的过滤规则可以参见官网: 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>
  • 过滤异常:
<?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. 官网:https://gleclaire.github.io/findbugs-maven-plugin/usage.html
  2. bug描述:http://findbugs.sourceforge.net/bugDescriptions.html
  3. https://www.cnblogs.com/xuehanyu/p/4520816.html
  4. https://blog.csdn.net/jokes000/article/details/7872849
  5. https://blog.csdn.net/rainbow702/article/details/54138155

maven项目集成findbugs详解相关推荐

  1. 2021 使用IDEA创建并编写你的第一个Maven项目【图文详解】

    1 使用IDEA创建你的第一个Maven项目 2 使用IDEA编写一个Maven项目 1 使用IDEA创建你的第一个Maven项目 新建一个空白项目 File-->New-->Projec ...

  2. maven 与intellij IDEA 下maven 为groovy 项目生成jar 详解

    2019独角兽企业重金招聘Python工程师标准>>> W7下安装 maven与intellij IDEA 下maven为groovy项目生成jar详解(适合新手) 第一步:下载ma ...

  3. Maven中pom文件详解

    在IDE中使用Maven IDE工具 MyEclipse 集成maven插件 Eclipse ​ Eclipse For Java EE IDEA 集成Maven插件 在IDE中 配置Maven 指定 ...

  4. idea 执行java maven,IDEA的run maven方式启动步骤详解

    安装jetty插件 1. 找到Plugins,查找jetty插件,安装"IDEA Jetty Runner",安装好后重启IDEA 安装插件:Maven Helper 方法同Jet ...

  5. IDEA Project Structure(项目结构)详解

    IDEA Project Structure(项目结构)详解 1.简介 1.1 打开方式 1.2 结构 2.Project Settings(项目设置) 2.1 Project(项目信息) 2.2 M ...

  6. Maven中央仓库发布详解

    Maven中央仓库发布详解 开通官方账号 注册 提交issue 按照提示步骤操作 准备工作 签名工具 配置Maven Setting.xml 上传jar包 修改项目pom.xml 仓库管理 开通官方账 ...

  7. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  8. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

  9. angular 标准目录结构_Angular-cli新建项目目录结构详解

    Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...

最新文章

  1. iDoNews 业界报不道:大众点评最有价值的两个东西
  2. java Gregorian,Java GregorianCalendar getTimeZone()用法及代码示例
  3. .Net 程序员走向高端必读书单汇总
  4. golang rpc demo
  5. 感谢CSDN赠送的2021年新年礼物
  6. 源于 Node.js的HTML 模板引擎Jade的一个hello world项目
  7. 通过OracleDataReader来读取BLOB类型的数据
  8. 解决CodeIgniter大量查询sql时占用内存大问题
  9. 【CCF】20180902-买菜
  10. 对爬虫数据分析的同学不要错过啦 数据分析数据可视化: Matplotlib
  11. Chrome DevTools的Network面板
  12. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·010【高级查询】
  13. 2. SVM线性分类器
  14. Spring MVC 接收POST表单请求,获取参数总结
  15. AtCoder Beginner Contest 182B
  16. 网络数据抓包分析工具Debookee 8 for Mac
  17. Springboot内置tomcat优化
  18. 关于写好一篇英文学术论文(及搞好本领域学术研究)的一些想法
  19. 计算机系大神和数学系系花,小甜文:《一贱钟情,大神求放过》1v1双C,男主小奶狗,全程高甜...
  20. 防病毒软件测评权威机构

热门文章

  1. 打开winsockexpert V0.6 beta1工具,选择监听的程序里面没有进程及解决方法:
  2. 计算机毕业设计Java药房管理系统(系统+源码+mysql数据库+Lw文档)
  3. 机器学习算法:支持向量机(SVM)
  4. 郑州分销系统开发|二级分销系统开发应该如何分佣?
  5. centos7禁用scp
  6. VLANTrunk技术
  7. QML类型——Component
  8. 至高之战服务器位置在哪里,至高之战专业系统
  9. web服务器可以上传信息吗,Web服务器的架设上传.doc
  10. 使用vue互联QQ音乐完成网站音乐播放器