Prebop Preprocessorがそれなりに使えそうだったけど、includeが使えないのでVelocityをプリプロセッサとして使ってみることにした。
ソースコードはこんな感じになる。
コメントアウトしてもちゃんと動くので*1、Eclipseの補完やリファクタリングが使えるのがうれしい。
/*#if($debug)*/
public String toString() {
return "ほえほえ〜";
}
/*#end*/
ビルドするときは、コンパイルまえにプリプロセッサで処理を行う。
<taskdef name="texen" classname="org.apache.velocity.texen.ant.TexenTask">
<classpath location=".../velocity-dep-1.4.jar" />
</taskdef><target name="preprocess">
<mkdir dir="${build.preprocessed}" />
<texen
templatepath="${src.dir}"
controltemplate="Foo.java"
outputdirectory="${build.preprocessed}"
outputfile="Foo.java"
inputencoding="${src.encoding}"
contextproperties="${preprocess.properties}" />
</target>
ほんとはinludeディレクティブを使ってクラスを作らずにモジュール分割しようと思っていたけど、スタブフィールド/メソッドを書く手間を考えたら、かえって面倒になりそうだったので、使わなかった。この辺は設計しだいかも。
追記
VPPは使えるのかどうかよく分からない。コンテキストの中身をbuild.xmlで定義できたりすると便利だけど。
*1:一行コメントはなぜかだめだった…