2009-07-22 56 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

已投票的第一个回答已经存在,但您也可以使用映射器复制到多个目的地。