2011-11-28 18 views
6

Tôi cố gắng để di chuyển một tập tin (xác định bởi một mẫu) đến một địa điểm được đưa ra trong một macrodef Ant:Macrodef và "tính địa phương"

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

này sẽ làm việc chỉ một lần như ${source_name} là không thay đổi.

Một tùy chọn sẽ là sử dụng tác vụ biến nhưng tôi không tìm thấy cách chỉ định một refid cho var.

Có cách nào để có thứ gì đó tương tự như biến cục bộ trong macrodef không? Hoặc (XY vấn đề) là có một cách tốt hơn để giải quyết vấn đề của tôi?

Trả lời

8

Vì Ant 1.8 bạn có thể sử dụng local task cho việc này. Ví dụ:

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

dụ của bạn chỉ là loại điều local là dành cho!

Các vấn đề liên quan