SpotBugs Antタスクの使い方

この章では、一般的なJavaビルドおよびデプロイメントツールであるAntのビルドスクリプトにSpotBugs を統合する方法について説明します。SpotBugs Antタスクを使用するとビルドスクリプトはJavaコードでSpotBugs を自動的に実行できます。

Antタスクは、Mike Fagan氏の多大なる貢献によるものです。

Antタスクのインストール

Antタスクをインストールするには、Antインストールのlibサブディレクトリに $SPOTBUGS_HOME/lib/spotbugs-ant.jar をコピーします。

注釈

SpotBugsに含まれていたバージョンのAntタスクを使用することを強くお勧めします。AntタスクのJarファイルは SpotBugsに含まれていたバージョン以外のバージョンで動作することを保証しません。

build.xml の変更

SpotBugsをbuild.xml (Antのビルドスクリプト)に組み込むには、まず最初にタスク定義を追加する必要があります。これは次のように記述します。

<taskdef
    resource="edu/umd/cs/findbugs/anttask/tasks.properties"
    classpath="path/to/spotbugs-ant.jar" />

タスク定義は、 spotbugs要素を build.xml に記述したとき、タスクの実行に使用されるクラスを指定します。

タスク定義を追加したら、spotbugsタスクを使用するターゲットを定義できます。次の例は、build.xml に追加したApache BCEL ライブラリです。

<property name="spotbugs.home" value="/export/home/daveho/work/spotbugs" />

<target name="spotbugs" depends="jar">
  <spotbugs home="${spotbugs.home}"
            output="xml"
            outputFile="bcel-sb.xml" >
    <auxClasspath path="${basedir}/lib/Regex.jar" />
    <sourcePath path="${basedir}/src/java" />
    <class location="${basedir}/bin/bcel.jar" />
  </spotbugs>
</target>

spotbugs要素のhome 属性には、SpotBugsがインストールされているディレクトリが設定されている必要があります。つまり、$SPOTBUGS_HOME です。インストール を参照してください。

このターゲットは、bcel.jar に対してSpotBugsを実行します。これは、BCELのビルドスクリプトによって生成された Jarファイルです。("jar" ターゲットに依存させることで、SpotBugs を実行する前にライブラリが完全にコンパイルされていることを保証します)SpotBugsの出力は、XML形式で bcel-sb.xml というファイルに保存されます。補助JarファイルRegex.jarを補助クラスパスに追加します。なぜなら、BCEL ライブラリによって参照されるからです。保存されるバグデータがBCEL ソースコードへの正確な参照を持つようにするためにソースパスが指定されています。

タスクの実行

上記で定義したspotbugsターゲットを使用して、コマンドラインからAnt を起動する例を示します。

[daveho@noir]$ ant spotbugs
Buildfile: build.xml

init:

compile:

examples:

jar:

spotbugs:
 [spotbugs] Running SpotBugs...
 [spotbugs] Bugs were found
 [spotbugs] Output saved to bcel-sb.xml

BUILD SUCCESSFUL
Total time: 35 seconds

この場合バグ結果をXMLファイルに保存したのでSpotBugs GUIを使用して結果を表示できます。SpotBugsの実行 を参照してください。

パラメータ

この節では、SpotBugsタスクの使用時に指定できるパラメータについて説明します。

class

オプションのネストされた要素です。解析するクラスを指定します。class要素は、解析されるアーカイブファイル (jar、zip など)、ディレクトリ、クラスファイルの名前をlocation属性に指定する必要があります。複数のクラス要素は、単一のspotbugs 要素の子要素として指定します。

クラス要素の指定を追加する、または代わりに、SpotBugsタスクに解析するファイルを指定する1つまたは複数のfileset 要素を含めることができます。たとえば、filesetを使用して、ディレクトリ内のすべてのjarファイルを解析するように指定できます。

auxClasspath
オプションのネストされた要素です。解析するライブラリまたはアプリケーションで使用されるが、解析したくはないクラスを含むクラスパス (jar ファイルまたはディレクトリ)を指定します。AntのJavaタスクのclasspath 要素と同じ方法で指定します。
sourcePath
オプションのネストされた要素です。解析されるJava コードをコンパイルするために使用されるソースファイルを含むソースディレクトリのパスを指定します。ソースパスを指定することにより生成されたXML バグ出力に完全なソース情報が含まれ、後で GUI で見ることができます。
home
必須属性です。SpotBugsがインストールされているディレクトリの名前を設定する必要があります。
quietErrors
オプションのブール値属性です。trueのときは、SpotBugs の出力で深刻な解析エラーや見つからなかったクラスの報告が抑制されます。デフォルトは false です。
reportLevel
オプション属性です。問題を報告するための信頼度/優先度を指定します。low に設定すると、信頼度はバグをフィルタリングするために使われません。medium (デフォルト)に設定すると、信頼度が低い問題が抑制されます。high に設定すると、信頼度が高いバグだけが報告されます。
output
オプション属性です。出力形式を指定します。xml (デフォルト)に設定すると、出力はXML 形式になります。「xml:withMessages」に設定されているときは、出力は人間が読めるメッセージで拡張されたXML 形式になります。(XSLスタイルシートを使用してレポートを生成するときは、この形式を使用する必要があります)「HTML」に設定したときは、出力はHTML形式になります (デフォルトスタイルシートはdefault.xsl)。text に設定すると、出力は特別なテキスト形式になります。emacs に設定すると、出力はEmacs のエラーメッセージ形式になります。xdocs に設定すると、出力はApache Maven で使用する xdoc XML形式になります。
stylesheet
オプション属性です。出力がhtmlに設定されているときにhtml出力を生成するために使用するスタイルシートを設定します。SpotBugs 配布物に含まれるスタイルシートには、default.xsl、fancy.xsl、fancy-hist.xsl、plain.xsl、summary.xslがあります。stylesheet属性が指定されていないときのデフォルト値は default.xsl です。
sort
オプション属性です。output属性が text に設定されているときは、sort 属性は報告されたバグをクラスごとにソートするかどうかを設定します。デフォルトは true です。
outputFile
オプション属性です。SpotBugs出力を保存する出力ファイルの名前を指定します。デフォルトでは、出力は Ant によって直接表示されます。
debug
オプションのブール値属性です。true に設定すると、SpotBugs はどのクラスが解析されているか、どのバグパターンディテクタが実行されているかに関する診断情報を出力します。デフォルトは false です。
effort
解析力を設定します。指定する値は、mindefaultmax のいずれかでなければなりません。解析力の詳細については コマンドラインオプション を参照してください。
conserveSpace
effort="min" と同義です。
workHard
effort="max" と同義です。
visitors
オプション属性です。実行すべきバグディテクタのコンマ区切りリストを指定します。バグディテクタは、パッケージ名がないクラス名で指定します。デフォルトでは、デフォルトで無効にされていないすべてのディテクタが実行されます。
omitVisitors
オプション属性です。コンマ区切りのバグディテクタのリストを指定します。visitors 属性と似ていますが、実行しないディテクタを設定します。
chooseVisitors
オプション属性です。コンマ区切りのバグディテクタリストのバグディテクタの接頭辞に「+」または「 -」を設定して、選択的に有効/無効にします。
excludeFilter
オプション属性です。レポートから除外するバグを指定するフィルタのファイル名を指定します。フィルタファイル を参照してください。
excludePath
An optional nested element. It specifies a path containing filters specifying bugs to exclude from being reported. See フィルタファイル.
includeFilter
オプション属性です。報告するバグを指定するフィルタのファイル名を指定します。フィルタファイル を参照してください。
includePath
An optional nested element. It specifies a path containing filters specifying which bugs are reported. See フィルタファイル.
projectFile
オプション属性です。プロジェクトファイルの名前を指定します。プロジェクトファイルは、SpotBugs GUI によって作成され、クラス、補助クラスパスエントリ、ソースディレクトリを指定します。プロジェクトに名前を付けることによって、class 要素や``auxClasspath`` または sourcePath 属性を設定する必要がありません。プロジェクトの作成 を参照してください。
jvmargs
オプション属性です。SpotBugsを実行するために使用するJava 仮想マシンに渡す必要がある引数を指定します。この属性を使用して、巨大なプログラムを解析するときに JVM が使用するメモリ量を増やすためのフラグを指定する必要があります。
systemProperty
オプションのネストされた要素です。システムプロパティを定義します。name 属性はシステムプロパティの名前を指定し、value 属性はシステムプロパティの値を指定します。
timeout
オプション属性です。SpotBugsを実行しているJava プロセスがハングアップして終了する前に実行される時間をミリ秒単位で指定します。デフォルトは600,000ミリ秒 (10 分) です。巨大なプログラムのときは、SpotBugs は解析を完了するのに10分以上かかることがあります。
failOnError
オプションのブール値属性です。SpotBugs を実行中にエラーが発生したときに、ビルドプロセスを中断するかどうか指定します。デフォルトは false です。
errorProperty
オプション属性です。SpotBugs の実行中にエラーが発生したときに、true に設定するプロパティの名前を指定します。
warningsProperty
オプション属性です。 SpotBugs によって解析されたプログラムの警告が報告されたときに、 true に設定するプロパティの名前を指定します。
userPreferencesFile
オプション属性です。使用するユーザ設定ファイルを設定します。上記のオプションの一部が上書きされる可能性があります。最初の引数として userPreferencesFile を指定すると、後続のオプションで上書きすることを意味します。最後の引数として指定すると以前のオプションを上書きすることを意味します。このオプションの背後にある根拠は、コマンドライン実行で SpotBugs Eclipse プロジェクトの設定を再利用するためです。
nested
オプション属性です。解析されるファイルとディレクトリのリストにあるネストされた jar/zip ファイルのスキャンを有効また無効にします。デフォルトでは、ネストされたjar/zip ファイルのスキャンが有効になっています。
setExitCode
オプションのブール値属性です。終了コードがメインの ant ジョブに戻されるかどうか指定します。デフォルトは true です。