6. 使用 FindBugs™ Ant 任务

师成师成· 更新于 2026-09-28· 阅读 13 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

本章介绍如何将 FindBugs 集成到 Ant 构建脚本中,Ant 是一款流行的 Java 构建与部署工具。借助 FindBugs 的 Ant 任务,你的构建脚本可以自动对 Java 代码运行 FindBugs。

该 Ant 任务由 Mike Fagan 慷慨贡献。

1. 安装 Ant 任务

要安装 Ant 任务,只需将 $FINDBUGS_HOME/lib/findbugs-ant.jar 复制到 Ant 安装目录的 lib 子目录中即可。

\[Note\]注意
强烈建议你将 Ant 任务与它所附带的 FindBugs 版本配合使用。我们不保证该 Ant 任务的 Jar 文件能够与它所附带版本之外的任何 FindBugs 版本一起工作。

2. 修改 build.xml

要将 FindBugs 纳入 build.xml(Ant 的构建脚本),你首先需要添加一个任务定义。其内容应如下所示:

  <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>

该任务定义指明,当在 build.xml 中遇到 findbugs 元素时,应使用指定的类来执行该任务。

添加任务定义之后,你就可以定义一个使用 findbugs 任务的 target。下面是一个可以添加到 Apache BCEL 库的 build.xml 中的示例。

  <property name="findbugs.home" value="/export/home/daveho/work/findbugs" />

  <target name="findbugs" depends="jar">
    <findbugs home="${findbugs.home}"
              output="xml"
              outputFile="bcel-fb.xml" >
      <auxClasspath path="${basedir}/lib/Regex.jar" />
      <sourcePath path="${basedir}/src/java" />
      <class location="${basedir}/bin/bcel.jar" />
    </findbugs>
  </target>

findbugs 元素必须设置 home 属性为 FindBugs 的安装目录,即 $FINDBUGS_HOME。参见第 2 章,安装 FindBugs™。

该目标将对 bcel.jar 执行 FindBugs 分析,bcel.jar 是由 BCEL 的构建脚本生成的 Jar 文件。(通过让它依赖于 "jar" 目标,我们确保在对库运行 FindBugs 之前,库已经完全编译完毕。)FindBugs 的输出将以 XML 格式保存到名为 bcel-fb.xml 的文件中。辅助 Jar 文件 Regex.jar 被添加到辅助类路径中,因为主 BCEL 库引用了它。这里还指定了源路径,以便保存的缺陷数据能够准确地引用 BCEL 的源代码。

3. 执行任务

下面是从命令行调用 Ant 并使用上面定义的 findbugs 目标的示例。

  [daveho@noir]$ ant findbugs
  Buildfile: build.xml

  init:

  compile:

  examples:

  jar:

  findbugs:
   [findbugs] Running FindBugs...
   [findbugs] Bugs were found
   [findbugs] Output saved to bcel-fb.xml

  BUILD SUCCESSFUL
  Total time: 35 seconds

由于我们将缺陷结果保存在了一个 XML 文件中,因此可以使用 FindBugs™ 图形界面来查看这些结果;参见第 4 章,运行 FindBugs™。

4. 参数

本节介绍使用 FindBugs 任务时可以指定的参数。

class

一个可选的嵌套元素,用于指定要分析哪些类。class 元素必须指定一个 location 属性,用以指明要分析的归档文件(jar、zip 等)、目录或类文件。在单个 findbugs 元素下可以指定多个 class 子元素。

除了指定 class 元素之外(或代替它),FindBugs 任务还可以包含一个或多个 fileset 元素,用来指定要分析的文件。例如,您可以使用 fileset 指定分析某个目录下的所有 jar 文件。

auxClasspath

一个可选的嵌套元素,用于指定一个类路径(Jar 文件或目录),其中包含被分析的库或应用程序所使用、但您不希望对其加以分析的类。其指定方式与 Java 任务中 Ant 的 classpath 元素相同。

sourcePath

一个可选的嵌套元素,用于指定源文件目录路径,其中包含编译所分析 Java 代码时使用的源文件。指定了源路径后,生成的 XML 缺陷输出将包含完整的源信息,从而可以在图形界面中进行后续查看。

home

一个必需属性。必须设置为 FindBugs 安装所在的目录名称。

quietErrors

一个可选的布尔属性。如果为 true,FindBugs 输出中将抑制严重分析错误和缺失类的报告。默认值为 false。

reportLevel

一个可选属性。用于指定报告问题的置信度/优先级阈值。如果设置为 "low",则不使用置信度来过滤缺陷;如果设置为 "medium"(默认值),则会屏蔽低置信度的问题;如果设置为 "high",则只报告高置信度的缺陷。

output

可选属性。用于指定输出格式。如果设置为 "xml"(默认值),输出为 XML 格式;如果设置为 "xml:withMessages",输出为附加了可读消息的 XML 格式。(如果您打算使用 XSL 样式表生成报告,则应使用此格式。)如果设置为 "html",输出为 HTML 格式(默认样式表为 default.xsl);如果设置为 "text",输出为专用文本格式;如果设置为 "emacs",输出为 Emacs 错误消息格式;如果设置为 "xdocs",输出为用于 Apache Maven 的 xdoc XML。

stylesheet

可选属性。用于指定当输出设置为 html 时生成 HTML 输出所使用的样式表。FindBugs 发行版中包含的样式表有 default.xsl、fancy.xsl、fancy-hist.xsl、plain.xsl 和 summary.xsl。如果未提供 stylesheet 属性,默认值为 default.xsl。

sort

sort 可选属性。如果 output 属性设置为 "text",则 sort 属性指定所报告的缺陷是否按类进行排序。默认值为 true。

outputFile

可选属性。如果指定该属性,则用于命名保存 FindBugs 输出的输出文件。默认情况下,输出由 Ant 直接显示。

debug

可选的布尔属性。如果设置为 true,FindBugs 会打印诊断信息,说明正在分析哪些类以及正在运行哪些缺陷模式检测器。默认值为 false。

effort

设置分析强度级别。指定的值应为 min、default 或 max 之一。有关设置分析级别的更多信息,请参见第 3 章,“命令行选项”。

conserveSpace

等同于 effort="min"。

workHard

等同于 effort="max"。

visitors

可选属性。指定一个以逗号分隔的缺陷检测器列表,表示应当运行哪些缺陷检测器。缺陷检测器通过其类名指定,不带任何包名限定。默认情况下,会运行所有未被默认禁用的检测器。

omitVisitors

可选属性。指定一个以逗号分隔的缺陷检测器列表。它与 visitors 属性类似,不同之处在于它指定的是将不会运行的检测器。

chooseVisitors

可选属性。指定一个以逗号分隔的缺陷检测器列表,每个检测器前带有 "+" 或 "-" 前缀,用于有选择地启用或禁用它们。

excludeFilter

可选属性。指定一个过滤器文件名,用于指明哪些缺陷不应当被报告。参见第 8 章,过滤器文件。

includeFilter

可选属性。指定一个过滤器文件名,用于指明应当报告哪些缺陷。参见第 8 章,过滤器文件。

projectFile

可选属性。指定项目文件的名称。项目文件由 FindBugs 图形界面创建,其中指定了类、辅助类路径条目以及源代码目录。通过指定项目,您无需指定任何 class 元素,也无需指定 auxClasspath 或 sourcePath 属性。有关如何创建项目,请参见第 4 章,运行 FindBugs™。

jvmargs

可选属性。指定应当传递给运行 FindBugs 的 Java 虚拟机的参数。如果您正在分析一个非常大的程序,可能需要使用此属性来指定标志,以增加 JVM 可使用的内存量。

systemProperty

可选的嵌套元素。如果指定,用于定义一个系统属性。name 属性指定系统属性的名称,value 属性指定系统属性的值。

timeout

可选属性。指定执行 FindBugs 的 Java 进程在被判定为挂起并终止之前允许运行的时间(毫秒)。默认值为 600,000 毫秒,即十分钟。请注意,对于非常大的程序,FindBugs 可能需要超过十分钟才能完成分析。

failOnError

可选的布尔属性。指定在运行 FindBugs 出现错误时是否中止构建过程。默认值为 "false"。

errorProperty

可选属性,指定一个属性的名称。如果在运行 FindBugs 时发生错误,该属性将被设置为 "true"。

warningsProperty

可选属性,指定一个属性的名称。如果 FindBugs 对被分析的程序报告了任何警告,该属性将被设置为 "true"。

userPreferencesFile

可选属性。设置要使用的用户首选项文件的路径,该文件可能会覆盖上述部分选项。(将 userPreferencesFile 作为第一个参数意味着后续选项将覆盖它;作为最后一个参数意味着它将覆盖之前的一些选项。)该选项的目的是为了在命令行执行时复用 FindBugs 的 Eclipse 项目设置。

nested

可选属性,用于启用或禁用对待分析文件和目录列表中发现的嵌套 jar 和 zip 文件的扫描。默认情况下,嵌套 jar/zip 文件的扫描是启用的。

setExitCode

可选的布尔属性。指定是否将退出码返回给主 ant 任务。默认值为 "true"。

评论

登录后参与评论

正在加载评论…