Eclipseでapt (Annotation Processing Tool)をデバッグする方法

Java6で導入されたPluggable Annotation Processor APIとそれを利用するためのAnnotation Processing Tool(以降APT)はJava5の頃よりも格段にその開発が簡略化されているが、通常のコードと違いコンパイル時に動作するため、デバッグの方法は無い(と思っていた)。

EclipseのJDTはaptをサポートしており、コードのビルド時にaptをプラグインして実行出来るが、実はaptのデバッグもできる。

以下、その手順。

1. ブレークポイントを設定する
自らが実装したAnnotation Processorのメソッドにブレークポイントを設定する。通常Annotation Processorを実装する場合はprocessメソッドをオーバライドすることが殆どなので、このメソッドをつかうのが良いだろう。

2. Eclipseワークベンチをデバッグ実行する
aptをデバッグするには自身を起動する別なEclipseインスタンスがあれば良いのだが、Eclipseは自身のプラグインの開発、デバッグの為にワークベンチを外部でデバッグ実行することができる。

メニュー -> 実行 -> 実行の構成で 「Eclipseアプリケーション」に新規で構成を作成し、以下のようにワークベンチを起動するように構成を編集して保存(適用)する。

恐らく編集が必要なのは「実行するプログラム」で

    • "プロダクトの実行"のドロップダウンから"org.eclipse.sdk.ide"
    • "アプリケーションの実行"のドロップダウンから"org.eclipse.ui.ide.workbench"

このどちらかを選べば良いと思う。(この辺私は詳しく無いが前者はIDE全体、後者はワークベンチだけを実行するのだろうと思う)

3. ワークベンチ側でビルドを実行する
起動したEclipse ワークベンチの別インスタンスは何も読込まれていないため、そのままではaptは起動されない。なので各自aptを使用しているプロジェクト※1を起動したワークベンチに読込むことで、自動的にビルドが始まり起動元のEclipse側でブレークするのを確認できるだろう。なお、ワークベンチ側で設定した内容や読込んだプロジェクトは保存されるので、次回ワークベンチを起動した際に同じ操作をする必要は無い。※2


※1:独自に開発したaptを利用する場合はプロジェクト設定が必要であり、プロジェクトのプロパティから明示的に指定する。

上記の例では AnnotationProcessor.jarとして提供されたaptを該当プロジェクトのコンパイル時に使用するよう、設定している。

※2: 「2. Eclipseワークベンチをデバッグ実行する」で設定した実行構成の「ロケーション」で指定した場所(ディレクトリ)が起動されたワークベンチのメタデータディレクトリとして使用されるので、他の場所に環境を移行する場合はここをコピーすれば良い。 (ここでは ${workspace_loc}/../runtime-新規構成 というベタな名前になっているが..)