SpotBugs FAQ¶
このドキュメントには,SpotBugs に関する FAQ が含まれています。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 クラスに関する重要な事実は,それが参照するクラスに関する情報を必要とします。たとえば:
- クラスが継承する他のクラスとインタフェース
- 外部クラスとインタフェース内のメソッドによってスローされる例外
「補助クラスパス」は,SpotBugs で解析するコードで使用されるクラスを含む Jar ファイル,ディレクトリ,クラスのリストですが,SpotBugs によって解析されるべきではありません。
SpotBugs に被参照クラスに関する完全な情報がない場合,可能なかぎり正確な結果を生成できません。たとえは,被参照クラスの完全なリポジトリを持つことで,SpotBugs は制御フロー情報を削減できるので,実行時に実現性が最も高いメソッドを通じてパスに集中できます。また,疑わしい参照比較ディテクタなどのバグディテクタの中には完全な型階層情報を必要とする型推論を実行できるものがあります。
これらの理由から,SpotBugs の実行時に補助クラスパスを完全に指定することを強くお勧めします。-auxclasspath
コマンドラインオプション,または GUI プロジェクトエディタダイアログの "Classpath entries" リストを使って設定できます。
SpotBugs がアプリケーションによって参照されるクラスを見つけられない場合,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 設定が有効であることを確認します。疑わしいときはデフォルトに戻してください。
- エラーログビューにエラーが表示されていないことを確認します。