SpotBugs 常见问题
本文档包含关于 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。
评论
登录后参与评论
KnowForge