說我需要做的是這樣的:螞蟻:如何寫可選的嵌套元素
<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與「元素」屬性是這樣的:
<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
元素中的文件集定義)。
如何編寫裏面的其他文件集 macrodef這樣Ant就不會抱怨了?
這很好,但是選擇了copy + fileset作爲示例。在我的情況下,「copy」是「mxmlc」(Flex應用程序編譯器),「fileset」是「include-libraries」。仍然upvoting作爲contrib FileSet似乎很有用。 – Borek 2010-10-22 07:08:18
@Borek - 我採取的另一種方法是調用XSLT樣式表來構建一個成本ANT build.xml,然後從主build.xml的目標中調用該自定義生成的build.xml文件。如果你更新的問題更符合你想要做的事情,我可以發表一個例子。 – 2010-10-22 11:06:10
我寧願留在「純粹的螞蟻」這是足夠凌亂:)我已經發布我目前的解決方案 - 不是最優雅的,但實現任務。 – Borek 2010-10-22 13:39:15