运行 SpotBugs

qianmoQqianmoQ· 更新于 2026-09-30· 阅读 17 分钟· 0 次阅读

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

SpotBugs 具有两种用户界面:图形用户界面(GUI)和命令行用户界面。本章介绍如何运行这两种用户界面。

快速入门

如果您在 Windows 系统上运行 SpotBugs,请双击文件 %SPOTBUGS_HOME%\lib\spotbugs.jar 以启动 SpotBugs GUI。

在 Unix、Linux 或 macOS 系统上,请运行 $SPOTBUGS_HOME/bin/spotbugs 脚本,或运行命令 java -jar $SPOTBUGS_HOME/lib/spotbugs.jar 来启动 SpotBugs GUI。

有关如何使用该 GUI 的信息,请参阅 使用 SpotBugs GUI。

运行 SpotBugs

本节介绍如何调用 SpotBugs 程序。调用 SpotBugs 有两种方式:直接调用,或者使用包装脚本调用。

直接调用 SpotBugs

运行 SpotBugs 的首选方式是使用 JVM(java)可执行程序的 -jar 命令行开关直接执行 $SPOTBUGS_HOME/lib/spotbugs.jar。(1.3.5 之前的 SpotBugs 版本需要使用包装脚本来调用 SpotBugs。)

直接调用 SpotBugs 的一般语法如下:

java [JVM arguments] -jar $SPOTBUGS_HOME/lib/spotbugs.jar options...

选择用户界面

第一个命令行选项用于选择要执行的 SpotBugs 用户界面。可选值如下:

-gui:

启动图形用户界面(GUI)

-textui:

运行命令行用户界面

-version:

显示 SpotBugs 版本号。

-help:

显示 SpotBugs 命令行用户界面的帮助信息

-gui1:

执行原有的(已废弃的)SpotBugs 图形用户界面

Java 虚拟机(JVM)参数

在调用 SpotBugs 时,有几个 Java 虚拟机参数非常有用。

-XmxNNm:

将最大 Java 堆大小设置为 NN 兆字节。SpotBugs 通常需要大量内存。对于非常庞大的项目,使用 1500 兆字节并不少见。

-Dname=value:

设置 Java 系统属性。例如,你可以使用参数 -Duser.language=ja 以日语显示 GUI 消息。

使用包装脚本调用 SpotBugs

运行 SpotBugs 的另一种方式是使用包装脚本。

在类 Unix 系统上,使用以下命令调用包装脚本:

$ $SPOTBUGS_HOME/bin/spotbugs options...

在 Windows 系统上,调用包装脚本的命令是

C:\My Directory>%SPOTBUGS_HOME%\bin\spotbugs.bat options...

在类 Unix 和 Windows 系统上,你只需将 $SPOTBUGS_HOME/bin 目录添加到 PATH 环境变量中,然后即可通过 spotbugs 命令调用 SpotBugs。

包装脚本的命令行选项

SpotBugs 包装脚本支持以下命令行选项。请注意,这些命令行选项并非由 SpotBugs 程序本身处理,而是由包装脚本处理的。

-jvmArgs _args_:

指定要传递给 JVM 的参数。例如,你可能想要设置一个 JVM 属性:

$ spotbugs -textui -jvmArgs "-Duser.language=ja" myApp.jar

-javahome _directory_:

指定用于执行 FindBugs 的 JRE(Java 运行时环境)所在的目录。

-maxHeap _size_:

以兆字节为单位指定最大的 Java 堆大小。默认值为 256。分析非常大型的程序或库时可能需要更多内存。

-debug:

将所运行的检测器和所分析的类的跟踪信息打印到标准输出。对于排查意外的分析失败问题很有帮助。

-property _name=value_:

此选项用于设置系统属性。SpotBugs 使用系统属性来配置分析选项,详见 Analysis Properties。您可以多次使用此选项来设置多个属性。注意:在大多数 Windows 版本中,name=value 字符串必须用引号括起来。

命令行选项

本节介绍 SpotBugs 支持的命令行选项。这些命令行选项既可以在直接调用 SpotBugs 时使用,也可以在使用包装脚本时使用。

通用命令行选项

这些选项既可用于图形用户界面,也可用于命令行界面。

-effort[:min|less|default|more|max]:

设置分析努力级别。-effort:min 会禁用若干能提高精确度但也会增加内存消耗的分析。如果你发现使用 -effort:less 时 SpotBugs 仍然内存耗尽,或完成分析所需时间异常漫长,可以尝试此选项。-effort:less 会禁用一些能提高精确度但也会增加内存消耗的分析。如果你发现使用 -effort:more/-effort:default 时 SpotBugs 会内存耗尽,或完成分析所需时间异常漫长,可以尝试此选项。-effort:more 会运行多项分析以查找缺陷,这也是 -effort:default 的设置。-effort:max 启用那些能提高精确度并发现更多缺陷的分析,但可能需要更多内存和更长的完成时间。参见努力级别。

-project _project_:

指定要分析的项目。您指定的项目文件应当是通过图形界面创建的,通常以扩展名 .fb 或 .fbp 结尾。

-pluginList <jar1[;jar2…]>:

指定要加载的插件 Jar 文件列表。

-home <home directory>:

指定 SpotBugs 主目录。

-adjustExperimental:

实验性 Bug 模式的优先级降低。

-workHard:

确保分析强度至少为 ‘default’。

-conserveSpace:

与 -effort:min 相同(为了向后兼容)。

图形界面选项

这些选项仅被图形用户界面所接受。

-look:plastic|gtk|native:

设置 Swing 外观。

文本 UI 选项

这些选项仅被文本用户界面接受。

-sortByClass=filepath:

按类名对报告的缺陷实例进行排序。

从 SpotBugs 4.5.0 起,该选项接收一个文件路径,例如 -sortByClass=path/to/spotbugs.txt。也支持设置多个报告,例如 -xml=spotbugs.xml -sortByClass=spotbugs.txt。

-include _filterFile.xml_:

仅报告与 filterFile.xml 中指定的过滤器相匹配的缺陷实例。参见 过滤器文件。

-exclude _filterFile.xml_:

报告除 filterFile.xml 指定的过滤器所匹配之外的所有错误实例。参见 过滤器文件。

-onlyAnalyze com.foobar.MyClass,com.foobar.mypkg.,!com.foobar.mypkg.ExcludedClass*::

将分析限制在给定的以逗号分隔的类和包列表中。与过滤不同,该选项会避免对未显式匹配的类和包运行分析:对于大型项目,这可以大幅减少运行分析所需的时间。(不过,某些检测器如果没有在整个应用程序上运行,可能会产生不准确的结果。)类应使用其完整类名(包含包名)指定,包的指定方式应与 Java import 语句中导入包内所有类的方式相同(即,在包的完整名称后加上 .*)。将 .* 替换为 .- 可同时分析所有子包。以 ! 开头的项将被视为排除项,从分析中移除原本会被包含的类。

-low:

报告所有缺陷。

-medium:

报告中等和高优先级的缺陷。这是默认设置。

-high:

仅报告高优先级缺陷。

-relaxed:

宽松报告模式。对于许多检测器,此选项会抑制用于避免报告误报的启发式规则。

-xml=filepath:

以 XML 格式输出缺陷报告。生成的 XML 数据稍后可以在图形界面中查看。你也可以将此选项指定为 -xml:withMessages;使用该选项变体时,XML 输出中将包含描述文件所含警告的人类可读消息。以这种方式生成的 XML 文件易于转换为报告。

从 SpotBugs 4.5.0 起,此选项接受一个文件路径,例如 -xml:withMessages=path/to/spotbugs.xml。也支持设置多个报告,例如 -xml=spotbugs.xml -html=spotbugs.html。

-html=filepath:

生成 HTML 输出。默认情况下,SpotBugs 会使用 default.xsl XSLT 样式表来生成 HTML:你可以在 spotbugs.jar 中找到该文件,也可以在 SpotBugs 的源码或二进制发行版中找到它。此选项的变体包括 -html:plain.xsl、-html:fancy.xsl 和 -html:fancy-hist.xsl。plain.xsl 样式表不使用 Javascript 或 DOM,在较旧的浏览器上或用于打印时可能效果更好。fancy.xsl 样式表使用 DOM 和 Javascript 进行导航,使用 CSS 进行视觉呈现。fancy-hist.xsl 是 fancy.xsl 样式表的演进版本,它大量使用 DOM 和 Javascript 来动态过滤缺陷列表。

如果你想指定自己的 XSLT 样式表来执行到 HTML 的转换,请使用选项 -html:myStylesheet.xsl,其中 myStylesheet.xsl 是你要使用的样式表的文件名。

从 SpotBugs 4.5.0 开始,此选项接收类似 -html:fancy-hist.xsl=path/to/spotbugs.html 的文件路径。同时也支持设置多个报告,例如 -xml=spotbugs.xml -html=spotbugs.html。

-sarif=filepath:

以 SARIF 2.1.0 格式输出缺陷报告。

从 SpotBugs 4.5.0 开始,该选项接收形如 -sarif=path/to/spotbugs.sarif 的文件路径。也支持通过 -xml=spotbugs.xml -sarif=spotbugs.sarif 设置多份报告。

-emacs=filepath:

以 Emacs 格式生成缺陷报告。

-xdocs=filepath:

以 xdoc XML 格式生成缺陷报告,供 Apache Maven 使用。

-output _filename_:

此参数已弃用。请改用报告类型选项,如 -xml=spotbugs.xml。

-outputFile _filename_:

此参数已弃用。请改用报表类型选项 -xml=spotbugs.xml。

-nested[:true|false]:

此选项用于启用或禁用对所分析文件和目录列表中发现的嵌套 jar 和 zip 文件的扫描。默认情况下,嵌套 jar/zip 文件的扫描处于启用状态。要禁用该功能,请在命令行参数中添加 -nested:false。

-auxclasspath _classpath_:

设置分析所用的辅助类路径(auxiliary classpath)。该类路径应包含属于被分析程序、但你并不希望对其检查缺陷的所有 jar 文件和包含类文件的目录。

-auxclasspathFromInput:

从标准输入读取分析用的辅助类路径,每行会向分析用的辅助类路径中添加一个新条目。

-auxclasspathFromFile _filepath_:

从文件中读取用于分析的辅助类路径,文件中的每一行都会向辅助类路径中添加一个新条目。

-analyzeFromFile _filepath_:

从文件读取要分析的文件,每一行都会向待分析的 classpath 中添加一个新条目。

-userPrefs _edu.umd.cs.findbugs.core.prefs_:

设置要使用的用户首选项文件的路径,该文件可能会覆盖上述某些选项。将 userPrefs 作为第一个参数指定,意味着后面的某些选项会覆盖它;作为最后一个参数指定,则意味着它会覆盖之前的某些选项)。该选项的目的是为了在命令行执行时复用 SpotBugs 的 Eclipse 项目设置。

-showPlugins:

显示可用检测器插件的列表。

输出选项

-timestampNow:

将结果的时间戳设置为当前时间。

-quiet:

抑制错误消息。

-longBugCodes:

报告长缺陷代码。

-progress:

在终端窗口中显示进度。

-release <release name>:

设置被分析应用程序的发布名称。

-maxRank <rank>:

仅报告缺陷等级不低于所给值的问题。

-dontCombineWarnings:

不要合并仅行号不同的警告。

-train[:outputDir]:

保存训练数据(实验性);输出目录默认为 ‘.’。

-useTraining[:inputDir]:

使用训练数据(实验性);输入目录默认为 ‘.’。

-redoAnalysis <filename>:

使用先前分析的配置重新执行分析。

-sourceInfo <filename>:

指定源信息文件(字段与类的行号)。

-projectName <project name>:

项目的描述性名称。

-reanalyze <filename>:

在提供的文件中重新执行分析。

输出过滤选项

-bugCategories <cat1[,cat2…]>:

只报告指定类别中的缺陷。

-excludeBugs <baseline bugs>:

排除在基线 XML 输出中同样被报告的缺陷。

-applySuppression:

排除任何与从 fbp 文件加载的抑制过滤器相匹配的缺陷。

检测器(访问器)配置选项

-visitors <v1[,v2…]>:

仅运行指定名称的访问器。

-omitVisitors <v1[,v2…]>:

省略具名访问者。

-chooseVisitors <+v1,-v2,…>:

选择性地启用/禁用检测器。

-choosePlugins <+p1,-p2,…>:

选择性地启用/禁用插件。

-adjustPriority <v1=(raise|lower)[,…]>:

提高/降低指定访问者的警告优先级

项目配置选项

-sourcepath <source path>:

设置被分析类的源文件路径。

-exitcode:

设置进程的退出码。

-noClassOk:

如果没有指定任何类,则输出空的警告文件。

-xargs:

从标准输入获取 class 文件/JAR 文件列表,而不是从命令行获取。

-bugReporters <name,name2,-name3>:

可显式启用/禁用的 Bug 报告器装饰器。

-printConfiguration:

打印配置并退出,不执行分析。

评论

登录后参与评论

正在加载评论…