FindBugs Maven插件教程

FindBugs是一种静态代码分析工具,可识别从Java代码中发现的问题。

我们可以使用FindBugs Maven插件将FindBugs集成到我们的构建过程中。 这篇博客文章确定了四个典型的用例,并描述了我们如何配置FindBugs Maven插件以支持每个用例。

描述的用例是:

  1. 创建FindBugs报告作为项目报告的一部分。
  2. 如果FindBugs从源代码中发现问题,则构建失败。
  3. 创建XML报告而不会使构建失败。
  4. 在不创建站点的情况下创建XML和HTML报告。

让我们开始吧。

用例1:创建Findbugs报告作为项目报告的一部分

有时,我们不想在每次编译项目时都运行静态代码分析。 相反,我们希望在需要时手动运行它。 在这种情况下,最好的选择是在创建项目站点时创建FindBugs报表。

我们可以按照以下步骤进行操作:

  1. 将FindBugs Maven插件的声明添加到pom.xml文件的报告部分。
  2. 通过执行以下步骤配置FindBugs Maven插件:
    1. 确保执行最准确的分析。
    2. 确保报告了所有错误。
    3. 确保已生成XML报告。

pom.xml文件的相关部分如下所示:

<reporting><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>2.5.2</version><configuration><!--Enables analysis which takes more memory but finds more bugs.If you run out of memory, changes the value of the effort elementto 'low'.--><effort>Max</effort><!-- Reports all bugs (other values are medium and max) --><threshold>Low</threshold><!-- Produces XML report --><xmlOutput>true</xmlOutput></configuration></plugin></plugins>
</reporting>

仅在编译项目时才创建报告。

换句话说,当我们要创建FindBugs报表时,我们必须在命令提示符处运行以下命令:

mvn clean compile site

让我们继续前进,看看如果FindBugs从源代码中发现问题,如何使构建失败。

用例2:如果发现问题,则构建失败

如果我们希望确保我们的代码甚至没有一个小问题,那么在每次编译项目时都运行静态代码分析可能是个好主意。 当然,仅当发现问题时构建失败时,这才有意义。

换句话说,如果发现问题,我们必须配置FindBugs Maven插件使构建失败。 我们可以按照以下步骤进行操作:

  1. 将插件声明添加到pom.xml文件的plugins部分。
  2. 通过执行以下步骤配置FindBugs Maven插件:
    1. 确保执行最准确的分析。
    2. 确保报告了所有错误。
    3. 确保已生成XML报告。
    4. 配置插件以创建到目录$ {project.build.directory} / findbugs的XML报告。
  3. 添加一个执行,该执行在编译 Maven生命周期阶段运行插件的检查目标。

pom.xml文件的相关部分如下所示:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>2.5.2</version><configuration><!--Enables analysis which takes more memory but finds more bugs.If you run out of memory, changes the value of the effort elementto 'Low'.--><effort>Max</effort><!-- Reports all bugs (other values are medium and max) --><threshold>Low</threshold><!-- Produces XML report --><xmlOutput>true</xmlOutput><!-- Configures the directory in which the XML report is created --><findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory></configuration><executions><!--Ensures that FindBugs inspects source code when project is compiled.--><execution><id>analyze-compile</id><phase>compile</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</build>

此配置可确保在编译Maven生命周期阶段调用Maven FindBugs插件的检查目标。 如果FindBugs从源代码中发现问题,则构建失败。

让我们继续前进,了解如何创建XML报告而不创建站点或构建失败。

用例3:在不失败的情况下创建XML报告

如果我们想将Jenkins与FindBugs集成在一起 ,我们需要找到一种在不使构建失败的情况下创建XML报告的方法。

我们可以按照以下步骤配置FindBugs Maven插件来做到这一点:

  1. 如上一节(用例2)中所述配置FindBugs Maven插件。
  2. 通过将failOnError配置属性的值设置为false,确保在发现问题时构建不会失败。

pom.xml文件的相关部分如下所示:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>2.5.2</version><configuration><!--Enables analysis which takes more memory but finds more bugs.If you run out of memory, changes the value of the effort elementto 'Low'.--><effort>Max</effort><!-- Build doesn't fail if problems are found --><failOnError>false</failOnError><!-- Reports all bugs (other values are medium and max) --><threshold>Low</threshold><!-- Produces XML report --><xmlOutput>true</xmlOutput><!-- Configures the directory in which the XML report is created --><findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory></configuration><executions><!--Ensures that FindBugs inspects source code when project is compiled.--><execution><id>analyze-compile</id><phase>compile</phase><goals><goal>check</goal></goals></execution></executions></plugin></plugins>
</Build>

现在,我们可以通过编译项目来创建XML报告。

最后一个用例描述了如何在不创建站点或构建失败的情况下创建XML和HTML报告。 让我们看看这是如何完成的。

用例4:创建XML和HTML报告而不创建站点

如果我们要创建XML和HTML报表而不创建项目站点或构建失败,则必须执行以下步骤:

  1. 如上一节(用例3)中所述配置FindBugs Maven插件。
  2. 将XML Maven插件的声明添加到pom.xml文件的plugins部分。
  3. 请按照以下步骤配置插件:
    1. 创建一个转换集,该转换集将转换从$ {project.build.directory} / findbugs目录中找到的所有XML文件,并将XSLT转换的结果写入同一目录。
    2. 配置样式表,该样式表指定XSLT转换的输出。 FindBugs库提供了五个样式表可用于此目的。 可用的样式表在示例配置中进行了描述。
    3. 确保XSLT转换的所有输出文件都具有文件扩展名.html
  4. 添加一个执行,该执行在编译 Maven生命周期阶段调用XML Maven插件的转换目标。
  5. 添加FindBugs(版本2.0.1)作为插件的依赖项。

pom.xml文件的相关部分如下所示:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>findbugs-maven-plugin</artifactId><version>2.5.2</version><configuration><!--Enables analysis which takes more memory but finds more bugs.If you run out of memory, changes the value of the effort elementto 'Low'.--><effort>Max</effort><!-- Build doesn't fail if problems are found --><failOnError>false</failOnError><!-- Reports all bugs (other values are medium and max) --><threshold>Low</threshold><!-- Produces XML report --><xmlOutput>true</xmlOutput><!-- Configures the directory in which the XML report is created --><findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory></configuration><executions><!--Ensures that FindBugs inspects source code when project is compiled.--><execution><id>analyze-compile</id><phase>compile</phase><goals><goal>check</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>xml-maven-plugin</artifactId><version>1.0</version><configuration><transformationSets><transformationSet><!-- Configures the source directory of XML files. --><dir>${project.build.directory}/findbugs</dir><!-- Configures the directory in which the FindBugs report is written.--><outputDir>${project.build.directory}/findbugs</outputDir><!-- Selects the used stylesheet. --><!-- <stylesheet>fancy-hist.xsl</stylesheet> --><stylesheet>default.xsl</stylesheet><!--<stylesheet>plain.xsl</stylesheet>--><!--<stylesheet>fancy.xsl</stylesheet>--><!--<stylesheet>summary.xsl</stylesheet>--><fileMappers><!-- Configures the file extension of the output files. --><fileMapperimplementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper"><targetExtension>.html</targetExtension></fileMapper></fileMappers></transformationSet></transformationSets></configuration><executions><!-- Ensures that the XSLT transformation is run when the project is compiled. --><execution><phase>compile</phase><goals><goal>transform</goal></goals></execution></executions><dependencies><dependency><groupId>com.google.code.findbugs</groupId><artifactId>findbugs</artifactId><version>2.0.1</version></dependency></dependencies></plugin></plugins>
</build>

此解决方案最初是在此StackOverflow问题中描述的 。

现在,我们可以通过编译项目来创建HTML和XML报告。

摘要

现在,我们已经确定了FindBugs Maven插件的四个典型用例,并了解了如何配置该插件以支持每个用例。

如果您知道本教程未涵盖的用例,请在此博客文章中发表评论以通知我。

  • 您可以从Github获得此博客文章的示例应用程序。

参考:来自Petri Kainulainen博客的JCG合作伙伴 Petri Kainulainen的FindBugs Maven插件教程 。

翻译自: https://www.javacodegeeks.com/2014/02/findbugs-maven-plugin-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365173.shtml

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

相关文章

Mac包管理神器Homebrew

概念 简称brew&#xff0c;是Mac OSX上的软件包管理工具&#xff0c;能在Mac中方便的安装软件或者卸载软件&#xff0c;相当于Red hat的yum、Ubuntu的apt-get。 安装命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 常…

网站大流量高并发访问的处理解决办法

————————目录————————- 1、硬件升级2、服务器集群、负载均衡、分布式3、CDN4、页面静态化5、缓存技术(Memcache、Redis)以上为架构层面以下为网站本地项目层面6、数据库优化 1、数据库分表技术 2、数据库读写分离 3、表建立相应的索引7、禁止盗链8、控制大文…

【完成整理】45套很酷的长影影 LOGO 设计

长阴影其实就是扩展了对象的投影&#xff0c;感觉是一种光线照射下的影子&#xff0c;通常采用角度为 45 度的投影&#xff0c;给对象添加了一份立体感。长阴影&#xff08;Long Shadow&#xff09;概念来自于最新非常流行的扁平化设计&#xff08;Flat Design&#xff09;。扁…

简述select语句的完整语法_SQL里的各种语句的完整语法

SQL分类&#xff1a;DDL—数据定义语言(CREATE&#xff0c;ALTER&#xff0c;DROP&#xff0c;DECLARE)  DML—数据操纵语言(SELECT&#xff0c;DELETE&#xff0c;UPDATE&#xff0c;INSERT)DCL—数据控制语言(GRANT&#xff0c;REVOKE&#xff0c;COMMIT&#xff0c;ROLLBA…

android 坐标点计算器,Android实现简易计算器

开之前我还是想问问老师&#xff0c;为什么一定要星期天前交作业呢&#xff1f;由于条件限制&#xff0c;作品是赶出来的不是细细琢磨出来的。所以在这版apk中功能较为简易&#xff0c;有待后期再不断更新与优化总体效果图如下布局activity_main.xml部分代码功能代码MainActivi…

使用反射进行测试

根据我以前的帖子&#xff0c;我正在撰写有关“单一责任原则”的演讲。 我花了大部分时间。 同时&#xff0c;我想分享一个示例代码&#xff0c;说明如何在类中测试内部字段。 我这样做是为了进行特殊的测试&#xff0c;这更多的是集成测试。 在依赖类的标准单元测试中&#x…

1的恢复出厂设置在哪里_罗斯蒙特变送器怎么恢复出厂设置?

罗斯蒙特变送器怎么恢复出厂设置?特殊情况下&#xff0c;罗斯蒙特变送器需要恢复出厂设置。罗斯蒙特变送器进行出厂设置的方法非常简单&#xff0c;只需要用手操器或AMS设备管理器就能操作。罗斯蒙特手操器里有一个恢复出厂调整值–传感器量程调整命令&#xff0c;使用此命令就…

【技术累积】【点】【java】【25】Orderd

基础概念 Orderd是spring core中定义的一个接口&#xff0c;使用它以及相关的Comparator和Order注解&#xff0c;可以实现对元素的排序。 Order 直接先说下Order注解吧&#xff0c;使用场景较多。 Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.M…

android 展示星期方式,Android显示从一周到另一周的日期(星期四至星期四)

最后我得到了工作一个解决方案&#xff0c;解决我的问题&#xff1a;在OnCreate中&#xff1a;TextView tv_chart_menuvotes (TextView) findViewById(R.id.tv_chart_menuvotes);String csPrevThur getPreviousThursday();String csNextThur getNextThursday();tv_chart_men…

Java 8 – Date API的新增功能

随着Java 8最终版本的发布&#xff0c;令我兴奋的新功能之一就是新的Date API&#xff0c;这是JSR 310的工作成果。 尽管Lambda表达式无疑是Java 8的一大亮点&#xff0c;但是拥有更好的日期处理方式无疑是受欢迎的。 这是一篇简短的文章&#xff08;第2部分或第3部分的第1部分…

ps抠图怎么放大图片_PS抠图时选区图片放大后,怎么移动图片抠图选区?

我们在Photoshop中使用套索、钢笔等工具进行抠图选区的时候&#xff0c;经常需要将图片放大&#xff0c;保证抠图选区的精确性&#xff0c;但是同时因为图片放大后超出了显示区域&#xff0c;我们在移动抠图选区工具进行抠图选区的时候&#xff0c;总是出现各种错误&#xff0c…

perl 用网易发邮件报错 554 DT:SPM 163 smtp14

查看相关链接&#xff0c;貌似被当成垃圾邮件了&#xff0c;发不出去 554 DT:SPM 163 smtp14,EsCowACHUegmKpdc3giRMQ--.29617S2 1553410599,please see http://mail.163.com/help/help_spam_16.htm?ip183.30.222.245&hostidsmtp14&time1553410599 脚本改成CC给自己&a…

Guzzle – 构建 RESTful Web 服务的 PHP HTTP 框架

Guzzle 减轻了发送 HTTP 请求和创建 Web 服务客户端的痛苦。它包含建立一个强大的网络服务客户端的工具&#xff0c;包括&#xff1a;服务描述定义的输入和输出的 API&#xff0c;资源迭代器遍历分页资源&#xff0c;尽可能有效地发送大量的请求。 您可能感兴趣的相关文章特别推…

合成和桥接方法

如果您曾经玩过反射并执行了getDeclaredMethods()您可能会感到惊讶。 您可能会获得源代码中不存在的方法。 或者&#xff0c;也许您看了一些方法的修饰符&#xff0c;发现其中一些特殊方法是易变的。 顺便说一句&#xff1a;对于Java采访来说&#xff0c;这是一个令人讨厌的问题…

小米手机升级Android6,小米3能升级miui 6?小米3升级miui v6教程

小米3升级miui v6教程来咯~小编还带来了miui v6下载&#xff0c;MIUI V6系统有了很多的变化&#xff0c;小米3是可以升级miui6系统的哦~如果你不知道步骤的话&#xff0c;就请参考下文吧。第一步、下载工具包和线刷完整包&#xff0c;下载完成后解压(请检查线刷包文件后缀名是否…

hibernate使用sessionfactory插入数据

1.引入hibernate-core.jar 2.java代码 public void meth{ Session session sessionFactory.openSession();Transaction tr session.beginTransaction();//1.创建Customer对象//2.调用Session的save()方法&#xff0c;将Customer对象持久化session.save(jbpmTaskInherit);tr.c…

lisp 揭 院长_HISLISPACSRIS EMR系统简介

HIS(LIS、PACS、RIS、EMR)系统简介一、定义说明医院信息系统(Hospital Information System, HIS)&#xff0c;利用电子计算机和通讯设备&#xff0c;为医院所属各部门提供病人诊疗信息和行政管理信息的收集、存储、处理、提取和数据交换的能力&#xff0c;并满足所有授权用户的…

第一次java作业

转载于:https://www.cnblogs.com/TuTu-winer/p/10591021.html

推荐25款很棒的 HTML5 前端框架和开发工具【下篇】

快速&#xff0c;安全&#xff0c;响应式&#xff0c;互动和美丽&#xff0c;这些优点吸引更多的 Web 开发人员使用 HTML5。HTML5 有许多新的特性功能&#xff0c;允许开发人员和设计师创建应用程序和网站&#xff0c;带给用户桌面应用程序的速度&#xff0c;性能和体验。 这里…

创建Sonarqube项目

Sonarqube &#xff08;nee Sonar&#xff09;是炸弹。 不必每天检查一次&#xff0c;但是如果您对质量很认真&#xff0c;则可以在Sprint计划期间&#xff08;如果不是每周一次&#xff09;对其进行检查。 在nemo.sonarqube.com上查看示例项目&#xff0c;例如OpenJPA &#…