Velocityをプリプロセッサにする

Prebop Preprocessorがそれなりに使えそうだったけど、includeが使えないのでVelocityをプリプロセッサとして使ってみることにした。

ソースコードはこんな感じになる。


/*#if($debug)*/
public String toString() {
return "ほえほえ〜";
}
/*#end*/
コメントアウトしてもちゃんと動くので*1Eclipseの補完やリファクタリングが使えるのがうれしい。


ビルドするときは、コンパイルまえにプリプロセッサで処理を行う。


<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:一行コメントはなぜかだめだった…