第6章 FindBugs Ant タスクの使用法

目次

1. Ant タスクのインストール
2. build.xml の修正
3. タスクの実行
4. パラメータ

この章では Java のビルド、デプロイツールとして人気のある Ant のための ビルドスクリプトの中で、FindBugs をどのように統合するかについて説明します。 FindBugs Ant タスクを使用することで、ビルドスクリプトは自動的にあなたの コードに対して FindBugs を実行することができます。

Ant タスクは、Mike Fagan によって寛大にも提供されました。

1. Ant タスクのインストール

Ant タスクをインストールは、$FINDBUGS_HOME/lib/findbugs-ant.jarAnt のインストール先にある lib サブディレクトリにコピーすれば よいだけです。

[Note]注意

使用するバージョンの FindBugs に含まれている Ant タスクを 使うことが強く推奨されます。 Ant タスクの Jar ファイルが 任意の FindBugs (その Jar ファイルが含まれていた以外のもの) で働くことは保障しません。

2. build.xml の修正

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 ソースコードを参照するために ソースパスが指定されています。

3. タスクの実行

前述した 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 グラフィカルユーザインターフェースの使用法 を参照してください。

4. パラメータ

この章では FindBugs タスクを使用するときに、指定することが できるパラメータについて説明します。

class

解析するクラスを指定する入れ子になった要素。 class 要素は location 属性にて、解析したいアーカイブファイル (jar, zip, etc.)、 ディレクトリあるいはクラスファイル を指定する必要があります。 複数の class 要素を、ひとつの findbugs 要素の子要素として指定することが できます。

auxClasspath

オプションの解析したいライブラリ、アプリケーションによって使用されているが (解析はしたくない)クラスが含まれているクラスパス (Jar ファイルまたはディレクトリ) を 指定する入れ子になって要素。 これは、Ant の Java タスク用の classpath 要素と同じ方法にて指定できます。

sourcePath

解析に使われたJavaコードのコンパイルに使われたソースファイルが 含まれているソースディレクトリを指定する入れ子のオプション属性要素。 ソースパスを指定することで、すべての生成された XML バグの出力は、 GUI によって後ほど閲覧することが可能な完全なソース情報を持ちます。

home

必須の属性。 FindBugs のインストール先ディレクトリ名をセットする必要があります。

quietErrors

オプションの boolean 属性。 true の場合は、深刻な解析エラーおよび見つからないクラスを報告は FindBugs の出力で抑制されます。 デフォルト false。

reportLevel

オプションの属性。 バグ報告のためのプライオリティの閾値を指定します。 もし "low" と設定した場合、すべてのバグが報告されます。 "midium" (デフォルト) の場合は、midium および high プライオリティのバグが報告されます。 "high" の場合は、high プライオリティのバグのみが報告されます。

output

オプションの属性。 出力形式を指定します。 "xml" (default) の場合、出力はXML形式となります。 "text" の場合、出力は特別なテキスト形式となります。 "emacs" の場合、出力は、Emacs のエラーメッセージ形式となります。

sort

オプションの属性。 output 属性を "text" に 設定した場合に、バグの報告をクラス順にソートするかどうかを sort 属性で設定します。 デフォルトは true です。

outputFile

オプションの属性。 指定した場合、FindBugs の出力はその名前のファイルへと 保存されます。 デフォルトでは、出力は Ant によって直接表示されます。

debug

オプションの boolean 属性。 true の場合、FindBugs はクラスの解析に 関する診断情報や、バグパターンの検出が開始されたことを表示します。 デフォルトは false です。

effort

解析のエフォートレベルを設定します。 この値は次の いづれかである必要があります。 mindefaultmax。 解析レベルについての更に詳しい情報は 項3. 「コマンドラインオプション」 を参照してください。

conserveSpace

effort="min" の類義属性

workHard

effort="max" の類義属性

visitors

オプションの属性。 実行したいバグ検出器のコンマ区切りのリストを 指定します。 バグ検出器はパッケージ指定を除いたそれらのクラス名で 指定します。 デフォルトでは、デフォルトで無効になっていない すべての検出器が実行されます。

omitVisitors

オプション属性。 これは、visitors 属性と似ていますが、 指定した検出器が 実行されない という点が違います。

excludeFilter

オプション属性。 報告から除外したいバグを指定するためのフィルタの ファイル名を指定します。 章 8. フィルタ ファイル を参照してください。

includeFilter

オプション属性。 バグ報告したいフィルタのファイル名を指定します。 章 8. フィルタ ファイル を参照してください。

projectFile

オプション属性。 プロジェクトファイルの名前を指定します。 プロジェクトファイルは FindBugs の GUI によって作成されたもので、 クラス、関連クラス およびソースディレクトリが指定されています。 プロジェクト名を指定することで classauxClasspathsourcePath といった要素、属性を指定する必要がなくなります。 プロジェクトの作成については 章 4. FindBugs グラフィカルユーザインターフェースの使用法 を参照してください。

jvmargs

オプション属性。 FindBugs が実行される際の Java仮想マシンへ渡される 任意の属性を指定します。 例えば、とても巨大なプログラムを解析しようとする時に JVM のメモリ使用量を増やすオプションを指定するためにこの属性を使用する 必要があるかもしれません。

systemProperty

オプションのネストされた要素。 指定されている場合、システムプロパティを定義します。 name 属性はシステムプロパティの名前を指定し、 value 属性はシステムプロパティの値を指定します。

timeout

オプション属性。 FindBugs が Java プロセスによって実行されハングして いると想定され、強制終了されるまでの合計時間をミリ秒にて指定します。。 デフォルトは 600,000 ミリ秒で、これは 10分です。 メモ: とても大きなプログラムの場合 FindBugs は解析を完了するまでに 10分以上の時間を必要とするかもしれません。

failOnError

オプションの boolean 属性。 FindBugs の実行中にエラーが発生したらビルドプロセスを 中断するか否か。 デフォルトは "false" です。

errorProperty

もし FindBugs の稼動中にエラーが発生したときに"true" に設定される プロパティの名前を指定するオプション属性。