次のようなことをする必要があるとしましょう:
<copy todir="${DEPLOYMENT_DIR}" overwrite="true">
<fileset dir="dir1" />
<fileset dir="dir2" />
<fileset dir="dir3" />
...
<if>
<equals arg1="${SPECIAL_BUILD}" arg2="true"/>
<then>
<fileset dir="dir7" />
<fileset dir="dir8" />
...
</then>
</if>
</copy>
(実際のタスクはコピーではありません。要点を説明するために使用しているだけです。)
<if>
Ant は、私のタスクが十分に公正な入れ子をサポートしていないと不平を言うでしょう。私はこれらの線に沿って考えてきました:
次のような「要素」属性を持つマクロ定義を追加できます。
<macrodef name="myCopy">
<element name="additional-path" />
<sequential>
<copy todir="${DEPLOYMENT_DIR}" overwrite="true">
<fileset dir="dir1" />
<fileset dir="dir2" />
<fileset dir="dir3" />
...
<additional-path/>
</copy>
</sequential>
</macrodef>
しかし、それは、呼び出し元 (ターゲット) が回避したい追加のパスを指定する必要があることを意味します (多くのターゲットがこのタスクを呼び出す場合、additional-path
要素内のファイルセット定義を繰り返す必要があります)。
Ant が文句を言わないように、マクロ定義内に追加のファイルセットをコーディングする方法は?