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設定が有効であることを確認します。疑わしいときはデフォルトに戻してください。

  • エラーログビューにエラーが表示されていないことを確認します。

Q7: SpotBugs の Maven プラグインはどこにありますか?

The Maven Plugin for SpotBugs may be found here.