tags:

views:

298

answers:

1

I'm trying to copy files in a macro, like so:

<project name="why" default="go">
  <macrodef name="copy-some-stuff">
    <attribute name="file.name" />

    <copy todir="/var/tmp">
      <fileset file="${file.name}" />
    </copy>
  </macrodef>

  <target name="go">
    <copy-some-stuff file.name="/etc/hosts" />
  </target>
</project>

but I get the following

BUILD FAILED
b.xml:3: macrodef doesn't support the nested "copy" element.

Any ideas, other than "yes, indeeed, macrodef doesn't support the nested "copy" element." I got that much. I'm looking for why this limitation is here and a possible workaround (without using antcall).

+2  A: 

Try surrounding the <copy> element with <sequential>:

  <macrodef name="copy-some-stuff">
    <attribute name="file.name" />
      <sequential>
        <copy todir="/var/tmp">
          <fileset file="@{file.name}" />
        </copy>
      </sequential>
  </macrodef>
Laurynas Biveinis
Thanks. Looks like I also botched the usage of attributes in the macro. Should be: <fileset file="@{file.name}" />Notice using @ param not $.
trenton
Indeed, didn't notice that. I have changed my answer accordingly.
Laurynas Biveinis