Tutorial :Ant: copy the same fileset to multiple places



Question:

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?


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


Solution: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"/>  


Solution:3

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


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »