この章では Java のビルド、デプロイツールとして人気のある Ant のための ビルドスクリプトの中で、FindBugs をどのように統合するかについて説明します。 FindBugs Ant タスクを使用することで、ビルドスクリプトは自動的にあなたの コードに対して FindBugs を実行することができます。
Ant タスクは、Mike Fagan によって寛大にも提供されました。
Ant タスクをインストールは、$FINDBUGS_HOME/lib/findbugs-ant.jar を Ant のインストール先にある lib サブディレクトリにコピーすれば よいだけです。
注意 | |
---|---|
使用するバージョンの FindBugs に含まれている Ant タスクを 使うことが強く推奨されます。 Ant タスクの Jar ファイルが 任意の FindBugs (その Jar ファイルが含まれていた以外のもの) で働くことは保障しません。 |
FindBugs を組み入れるために build.xml (Ant のためのビルドスクリプト) に、まずタスク定義を追加する必要があります。 これは次のようなものになるはずです:
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>
タスク定義は、build.xml の中に findbugs 要素が現れた場合、タスクを実行するために 示されたクラスが使われるために使用されます。
タスク定義を追加した後は、findbugs を用いて ターゲットを定義することができます。 ここに、Apache BCEL ライブラリの ための build.xml に追加することができる サンプルを示します。
<property name="findbugs.home" value="/export/home/daveho/work/findbugs" /> <target name="findbugs" depends="jar"> <findbugs home="${findbugs.home}" output="xml" outputFile="bcel-fb.xml" > <auxClasspath path="${basedir}/lib/Regex.jar" /> <sourcePath path="${basedir}/src/java" /> <class location="${basedir}/bin/bcel.jar" /> </findbugs> </target>
findbugs 要素は、FindBugs のインストール先ディレクトリ (別の言葉で言うと $FINDBUGS_HOME) をセットする home 属性を 必ず持っている必要があります。 章 2. FindBugs のインストールおよび起動 を参照してください。
このターゲットは、FindBugs を BCEL のビルドスクリプトによって生成される Jar ファイル bcel.jar に対して実行します。 (このターゲットが、"jar" ターゲットと 依存しているとすることで、そのライブラリが完全にコンパイルされた後、FindBugs が それに対して実行されることを確実にしています) FindBugs の出力は、bcel-fb.xml ファイルに XML 形式にて 保存されます。 主要な BCEL ライブラリによって参照されるため 補助 Jar ファイル Regex.jar は、aux クラスパスに追加されています。 保存されたバグデータが正確に BCEL ソースコードを参照するために ソースパスが指定されています。
前述した findbugs ターゲット定義を使用して、コマンドラインから Ant を呼び出す例を示します。
[daveho@noir]$ ant findbugs
Buildfile: build.xml
init:
compile:
examples:
jar:
findbugs:
[findbugs] Running FindBugs...
[findbugs] Bugs were found
[findbugs] Output saved to bcel-fb.xml
BUILD SUCCESSFUL
Total time: 35 seconds
この場合、バグ報告は XML ファイルとして保存しています、結果を閲覧するために FindBugs GUI を使うことができます。 章 4. FindBugs グラフィカルユーザインターフェースの使用法 を参照してください。
この章では FindBugs タスクを使用するときに、指定することが できるパラメータについて説明します。
解析するクラスを指定する入れ子になった要素。 class 要素は location 属性にて、解析したいアーカイブファイル (jar, zip, etc.)、 ディレクトリあるいはクラスファイル を指定する必要があります。 複数の class 要素を、ひとつの findbugs 要素の子要素として指定することが できます。
オプションの解析したいライブラリ、アプリケーションによって使用されているが (解析はしたくない)クラスが含まれているクラスパス (Jar ファイルまたはディレクトリ) を 指定する入れ子になって要素。 これは、Ant の Java タスク用の classpath 要素と同じ方法にて指定できます。
解析に使われたJavaコードのコンパイルに使われたソースファイルが 含まれているソースディレクトリを指定する入れ子のオプション属性要素。 ソースパスを指定することで、すべての生成された XML バグの出力は、 GUI によって後ほど閲覧することが可能な完全なソース情報を持ちます。
必須の属性。 FindBugs のインストール先ディレクトリ名をセットする必要があります。
オプションの boolean 属性。 true の場合は、深刻な解析エラーおよび見つからないクラスを報告は FindBugs の出力で抑制されます。 デフォルト false。
オプションの属性。 バグ報告のためのプライオリティの閾値を指定します。 もし "low" と設定した場合、すべてのバグが報告されます。 "midium" (デフォルト) の場合は、midium および high プライオリティのバグが報告されます。 "high" の場合は、high プライオリティのバグのみが報告されます。
オプションの属性。 出力形式を指定します。 "xml" (default) の場合、出力はXML形式となります。 "text" の場合、出力は特別なテキスト形式となります。 "emacs" の場合、出力は、Emacs のエラーメッセージ形式となります。
オプションの属性。 output 属性を "text" に 設定した場合に、バグの報告をクラス順にソートするかどうかを sort 属性で設定します。 デフォルトは true です。
オプションの属性。 指定した場合、FindBugs の出力はその名前のファイルへと 保存されます。 デフォルトでは、出力は Ant によって直接表示されます。
オプションの boolean 属性。 true の場合、FindBugs はクラスの解析に 関する診断情報や、バグパターンの検出が開始されたことを表示します。 デフォルトは false です。
解析のエフォートレベルを設定します。 この値は次の いづれかである必要があります。 min、 default、max。 解析レベルについての更に詳しい情報は 項3. 「コマンドラインオプション」 を参照してください。
effort="min" の類義属性
effort="max" の類義属性
オプションの属性。 実行したいバグ検出器のコンマ区切りのリストを 指定します。 バグ検出器はパッケージ指定を除いたそれらのクラス名で 指定します。 デフォルトでは、デフォルトで無効になっていない すべての検出器が実行されます。
オプション属性。 これは、visitors 属性と似ていますが、 指定した検出器が 実行されない という点が違います。
オプション属性。 報告から除外したいバグを指定するためのフィルタの ファイル名を指定します。 章 8. フィルタ ファイル を参照してください。
オプション属性。 バグ報告したいフィルタのファイル名を指定します。 章 8. フィルタ ファイル を参照してください。
オプション属性。 プロジェクトファイルの名前を指定します。 プロジェクトファイルは FindBugs の GUI によって作成されたもので、 クラス、関連クラス およびソースディレクトリが指定されています。 プロジェクト名を指定することで class や auxClasspath、sourcePath といった要素、属性を指定する必要がなくなります。 プロジェクトの作成については 章 4. FindBugs グラフィカルユーザインターフェースの使用法 を参照してください。
オプション属性。 FindBugs が実行される際の Java仮想マシンへ渡される 任意の属性を指定します。 例えば、とても巨大なプログラムを解析しようとする時に JVM のメモリ使用量を増やすオプションを指定するためにこの属性を使用する 必要があるかもしれません。
オプションのネストされた要素。 指定されている場合、システムプロパティを定義します。 name 属性はシステムプロパティの名前を指定し、 value 属性はシステムプロパティの値を指定します。
オプション属性。 FindBugs が Java プロセスによって実行されハングして いると想定され、強制終了されるまでの合計時間をミリ秒にて指定します。。 デフォルトは 600,000 ミリ秒で、これは 10分です。 メモ: とても大きなプログラムの場合 FindBugs は解析を完了するまでに 10分以上の時間を必要とするかもしれません。
オプションの boolean 属性。 FindBugs の実行中にエラーが発生したらビルドプロセスを 中断するか否か。 デフォルトは "false" です。
もし FindBugs の稼動中にエラーが発生したときに"true" に設定される プロパティの名前を指定するオプション属性。