SpotBugs 常见问题

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

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

本文档包含关于 SpotBugs 常见问题的解答。如果你想了解 SpotBugs 的总体信息,请查阅使用手册。

Q1:运行 SpotBugs 时出现 java.lang.UnsupportedClassVersionError

SpotBugs 需要 JRE8 或更高版本才能运行。如果你使用的是更早的版本,将会看到类似如下的异常错误信息:

Exception in thread “main” java.lang.UnsupportedClassVersionError: edu/umd/cs/findbugs/gui/FindBugsFrame (Unsupported major.minor version 52.0)

解决方法是升级到 JRE8 或更高版本。

Q2:SpotBugs 内存耗尽,或运行很长时间才能完成

一般来说,SpotBugs 需要大量内存和相对较快的 CPU。对于大型应用程序,可能需要 1024M 或更多的堆空间。

默认情况下,SpotBugs 分配 768M 的堆空间。你可以使用 -maxHeap n 选项来增加该值,其中 n 表示要分配的堆空间兆字节数。

Q3:什么是"辅助类路径"?为什么我要指定它?

要了解 Java 类的许多重要事实,都需要它所引用的类的信息。例如:

  • 该类继承了哪些其他类和接口
  • 外部类和接口中的方法可能抛出哪些异常

"辅助类路径"是一个列表,包含 Jar 文件、目录和 class 文件,其中的类被你希望 SpotBugs 分析的代码所使用,但这些类本身不应由 SpotBugs 进行分析。

如果 SpotBugs 没有获得关于所引用类的完整信息,就无法产生尽可能准确的结果。例如,拥有完整的所引用类仓库可以让 SpotBugs 剪枝控制流信息,从而集中分析那些在运行时最可能可行的方法路径。此外,某些缺陷检测器(例如可疑引用比较检测器)依赖于执行类型推断的能力,而这需要完整的类型层次结构信息。

基于这些原因,我们强烈建议你在运行 SpotBugs 时完整地指定辅助类路径。你可以通过使用 -auxclasspath 命令行选项,或在 GUI 项目编辑器对话框中的"Classpath entries"列表来实现这一点。

如果 SpotBugs 找不到应用程序所引用的某个类,它会在分析结束时输出一条消息,指明缺失的类。你应该修改辅助类路径,指定如何查找这些缺失的类,然后再次运行 SpotBugs。

Q4:Eclipse 插件无法加载

该问题的现象是 Eclipse 无法加载 SpotBugs UI 插件,并显示如下消息:

Plug-in “edu.umd.cs.findbugs.plugin.eclipse” was disabled due to missing or disabled prerequisite plug-in “org.eclipse.ui.ide”

产生此问题的原因是,随 SpotBugs 一起分发的 Eclipse 插件不兼容较旧的 Eclipse 3.x 版本。请使用 Eclipse Neon(4.6 版)或更新版本。

Q5:我收到了大量误报的 “OS” 和 “ODR” 警告

默认情况下,SpotBugs 假定任何方法调用都可能抛出非受检的运行时异常。因此,它可能认为方法中抛出的非受检异常会绕过对流或数据库资源 close() 方法的调用。

你可以使用 -workHard 命令行参数或 findbugs.workHard 布尔分析属性,让 SpotBugs 更努力地剪除不太可能出现的异常边。这通常能减少误报的警告数量,代价是分析速度变慢。

Q6:Eclipse 插件能够加载,但无法正常工作

  • 确保你要分析的 Java 代码已正确构建,且没有类路径或编译错误。
  • 确保项目和工作区的 SpotBugs 设置有效——如有疑问,请将其恢复为默认值。
  • 确保“错误日志”视图中没有显示错误。

Q7:SpotBugs 的 Maven 插件在哪里?

SpotBugs 的 Maven 插件可以在这里找到 here。

评论

登录后参与评论

正在加载评论…