Ant: copy the same fileset to multiple places

五迷三道 提交于 2019-12-30 01:36:14

问题


I need an Ant script that will copy one folder to several other places. As a good obedient programmer, I want not to repeat myself. Is there any way of taking a fileset like this:

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

And storing the fileset in a variable so it can be re-used?


回答1:


Declare an id attribute on the fileset and then reference it in each copy task.

For example:

<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>



回答2:


Rich's answer is probably better for your specific problem, but the generic way of reusing code in Ant is a <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"/>



回答3:


Upvoted first answer already, but you can also use a mapper to copy to multiple destinations.



来源:https://stackoverflow.com/questions/1164631/ant-copy-the-same-fileset-to-multiple-places

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!