findbugs maven plugin

通过分析编译后的二进制代码分析java代码中潜在的bug,插件运行基于findbugs 3.0.1,运行依赖java 7或者更高版本。

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<project ...>
<pluginRepositories>
<pluginRepository>
<id>Codehaus repository</id>
<url>http://repository.codehaus.org/</url>
</pluginRepository>
</pluginRepositories>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<!--
Enables analysis which takes more memory but finds more bugs.
If you run out of memory, changes the value of the effort element
to 'Low'.
-->
<maxRank>10</maxRank>
<effort>Low</effort>
<!-- Reports all bugs (other values are medium and max) -->
<threshold>max</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>
</plugin>
...
</plugins>
</build>
</project>

configuration里面主要是配置findbugs的一些参数。比如搜索bug的类型啊,等级,以及搜索开销的限制。
具体参数可以见文档.比如

  • ,可以限制检测bug的等级(1-20),一般来讲数字越小,等级越高。
  • 可以指定具体需要检测哪些bug。样例
    通过设置execution可以实现compile的过程中自动运行findbugs并且发现bug自动失败的配置。

Multimodule

Multimodule的情况可以只在总项目的pom.xml中设置,该设置对所有module生效;也可以只在子module中设置,它对子module生效。如果两个设置同时存在,子module的设置会覆盖总module。

另外,我在总的module里设置了,findbugs/check都有用,但是gui没用,暂时没找到原因

主要命令

  • findbugs:findbugs:查找当前项目的bug,并生成bug报告
  • fidnbugs:check 查找当前bug,不生成bug report
  • findbugs:gui 打开一个图形界面显示之前分析到的bug,gui很强大
  • findbugs:help 帮助文档。mvn findbugs:help -Ddetail=true -Dgoal=<goal-name>可以查看参数细节

使用方法

在设置execution时,直接执行mvn compile会自动调用findbugs,如果出错,会便以失败。
之后通过mvn findbugs:gui可以看到具体有哪些错误

不设置execution时,依次执行mvn compile, mvn findbugs:check,mvn findbugs:gui。这里要注意的是每次改完代码一定要compile,因为findbugs是基于字节码的分析。

参考文献


本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2015/11/06/findbugs-maven-plugin/