Скажите, что мне нужно сделать что-то вроде:
<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>
, что достаточно справедливо. Я думал так:
Я мог бы добавить macrodef с атрибутом "element", например так:
<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 не жаловался?