Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant:将同一文件集复制到多个位置_Ant - Fatal编程技术网

Ant:将同一文件集复制到多个位置

Ant:将同一文件集复制到多个位置,ant,Ant,我需要一个蚂蚁脚本,将一个文件夹复制到其他几个地方。作为一个好的顺从的程序员,我不想重复我自己。有没有任何方法可以获取这样的文件集: <copy todir="${target}/path/to/target/1"> <fileset dir="${src}"> <exclude name='**/*svn' /> </fileset> </copy> 并将文件集存储在变量中,以便可以重复使用?在文

我需要一个蚂蚁脚本,将一个文件夹复制到其他几个地方。作为一个好的顺从的程序员,我不想重复我自己。有没有任何方法可以获取这样的文件集:

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


并将
文件集
存储在变量中,以便可以重复使用?

在文件集上声明一个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>

...
对于您的特定问题可能更好,但是在Ant中重用代码的通用方法是一种简单的方法



已经对第一个答案进行了投票,但您也可以使用映射器复制到多个目的地。

正确。这是在这里定义的:在“定义过滤器集并稍后引用它”一节中。请注意,某些文件集选择器可能有副作用,这意味着两次引用同一文件集将不会得到相同的结果。例如:
将在第一次运行后更新其缓存,并在假定基础文件没有更改的情况下,稍后重新引用文件集,将返回一个空集。这应该是可接受的答案。实际接受的答案是重复代码,这正是OP所说的他试图避免的。
<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"/>