2009-07-22 41 views
30

我需要一個Ant腳本,將一個文件夾複製到其他幾個地方。作爲一個很好的順從程序員,我不想重複自己。有沒有采取這樣的文件集的任何方式:螞蟻:同樣的文件集複製到多個地方

<copy todir="${target}/path/to/target/1"> 
    <fileset dir="${src}"> 
     <exclude name='**/*svn' /> 
    </fileset> 
</copy> 

,並存儲在一個變量中fileset因此它可以重複使用?

回答

38

聲明的文件集的id屬性,然後在每個副本任務引用它。

例如:

<project name="foo"> 
    <fileset id="myFileSet" dir="${src}"> 
    <exclude name='**/*svn' /> 
    </fileset> 
    ... 
    <target name="copy1"> 
    <copy todir="${target}/path/to/target/1"> 
     <fileset refid="myFileSet"/> 
    </copy> 
    </target> 
    <target name="copy2"> 
    <copy todir="${target}/path/to/target/2"> 
     <fileset refid="myFileSet"/> 
    </copy> 
    </target> 
</project> 
+0

正確的。這被定義如下:https://ant.apache.org/manual/Types/filterset.html在部分「定義FilterSet後來引用它。」 – 2014-10-15 13:24:07

+0

注意某些文件集選擇可能有副作用,意爲指的是同一文件集兩次不會得到相同的結果。例如:``會後第一次運行更新其高速緩存,並重新提及的文件集後,假設基礎文件沒有變化,會返回一個空集。 – 2016-09-30 12:51:38

28

Rich's answer可能是您的特定問題的更好,但在螞蟻重用代碼的一般方式是<macrodef>

<macrodef name="copythings"> 
    <attribute name="todir"/> 
    <sequential> 
    <copy todir="@{todir}"> 
     <fileset dir="${src}"> 
     <exclude name='**/*svn' /> 
     </fileset> 
    </copy> 
    </sequential> 
</macrodef> 

<copythings todir="/path/to/target1"/> 
<copythings todir="/path/to/target2"/> 
0

已投票的第一個回答已經存在,但您也可以使用映射器複製到多個目的地。