antコンパイルターゲットの共通化

久しぶりに、antのビルドファイルを書いたので、備忘録がてらにメモ。
下のような感じで、あらかじめコンパイルする対象やライブラリをパスでまとめる。

  <!--メインのコンパイル対象ディレクトリ-->
  <path id="compile.main.src">
    <pathelement path="${dir.src.main}" />
  </path>

  <!--テスト実行時の対象ディレクトリ-->
  <path id="compile.test.src">
    <pathelement path="${dir.src.main}" />
    <pathelement path="${dir.src.test}" />
  </path>

  <!--ビルド時のライブラリ指定-->
  <path id="compile.main.classpath">
    <fileset dir="${dir.lib}" includes="*.jar" />
  </path>

次に、コンパイル用の共通ターゲットを用意する。javacの設定は、状況に合わせる。
1.5系のJavaEclipseを起動している状態で、1.4系のビルドを行う場合、forkをonにしないと、正常にビルドできない為、個人的には、いつもforkはonに設定してます。

  <!--コンパイル用共通ターゲット-->
  <target name="compile">
    <mkdir dir="${dir.work}" />
    <javac destdir="${dir.work}" fork="on" encoding="UTF-8" source="1.4" debug="on">
      <classpath refid="${classpath.refid}" />
      <src refid="${src.refid}" />
    </javac>
  </target>

あとは、コンパイル用共通ターゲットにparamで上記で作成したパスを指定して、antcallを使って呼び出すようにする。

  <target name="compile.main">
    <antcall target="compile">
      <param name="src.refid" value="compile.main.src"/>
      <param name="classpath.refid" value="compile.main.classpath"/>
    </antcall>
  </target>

それにしても、antは引数を引き渡しが面倒くさくてしょうがない。