说我需要做类似的事情:
<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>
(真正的任务不是复制,我只是用它来说明这一点。)
Ant 会抱怨我的任务不支持嵌套<if>
,这很公平。我一直在沿着这些思路思考:
我可以添加一个带有“元素”属性的宏定义,如下所示:
<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 不会抱怨?