2011-11-28 16 views
6

Próbuję przenieść plik (określony przez wzorzec) do danej lokalizacji w Ant macrodef:Macrodef i „właściwości lokalne”

<macrodef name="extract"> 
    <attribute name="package"/> 
    <sequential> 

     <!-- the path will contain the unique file in extracted regardless of the name --> 
     <path id="source_refid"> 
      <dirset dir="${dep}/lib/@{package}/extracted/"> 
       <include name="@{package}-*"/> 
      </dirset> 
     </path> 

     <!-- this is not working: properties are immutable --> 
     <property name="source_name" refid="source_refid"/> 

     <move 
      file="${source_name}" 
      tofile="${dep}/@{package}/" 
      overwrite="true" 
     /> 

    </sequential> 
</macrodef> 

To zadziała tylko raz jako ${source_name} jest niezmienna.

Opcja polegałaby na użyciu zadania zmiennej, ale nie znalazłem sposobu przypisania zmiany do var.

Czy istnieje sposób na coś podobnego do zmiennej lokalnej w makrodeficie? Czy (problem XY) jest lepszy sposób na rozwiązanie mojego problemu?

Odpowiedz

8

Od wersji Ant 1.8 można użyć do tego celu local task. Na przykład:

<local name="source_name"/> 
<property name="source_name" refid="source_refid"/> 

Twój przykład jest właśnie taki, dla którego jest local!