2009-08-04 14 views
5

Próbuję skopiować pliki w makro, jak tak:Jak <copy> w <macrodef> w ant?

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

ale pojawia się następujący

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

pomysłów, inne niż „tak, indeeed, macrodef nie obsługuje zagnieżdżony element "copy". " Mam tyle. Szukam, dlaczego to ograniczenie jest tutaj i możliwe obejście (bez użycia antcall).

+0

Wygląda jak ktoś nie przeczytał instrukcję dla macrodef. –

Odpowiedz

9

Spróbuj otaczający element <copy> z <sequential>:

<macrodef name="copy-some-stuff"> 
    <attribute name="file.name" /> 
    <sequential> 
     <copy todir="/var/tmp"> 
      <fileset file="@{file.name}" /> 
     </copy> 
    </sequential> 
</macrodef> 
+1

Dzięki. Wygląda na to, że również spartaczyłem użycie atrybutów w makrze. Powinno być: Zauważ, używając @ param nie $. – Trenton

+0

Rzeczywiście, nie zauważyłem tego. Zmieniłem odpowiednio swoją odpowiedź. –

+0

Czy możesz nieco wyjaśnić, dlaczego to działa? –