2009-04-08 23 views
6

Tôi muốn tạo một macro như vậy:Phần tử mặc định cho macrodef của Ant?

<macrodef name="testing"> 
    <element name="test" implicit="yes"/> 
    <sequential> 
    <test/> 
    </sequential> 
</macrodef> 

Và sau đó sử dụng nó:

<testing> 
    <echo message="hello world"/> 
</testing> 

Tuy nhiên, tôi muốn chỉ định một mặc định cho các yếu tố tiềm ẩn ... một cái gì đó như:

<macrodef name="testing"> 
    <element name="test" implicit="yes"> 
    <echo message="hello world"/> 
    </element> 
    <sequential> 
    <test/> 
    </sequential> 
</macrodef> 

vì vậy, tôi sau đó có thể sử dụng nó như vậy:

<testing/> 

Trừ khi tôi muốn thay đổi phần tử mặc định.

Điều này có thể thực hiện được nếu không xác định tác vụ qua lớp Java không? Cho đến nay, tôi không thấy bất kỳ tài liệu nào cho biết cách thực hiện, nếu có.


Cập nhật

tôi đã kết thúc việc giải quyết các vấn đề cụ thể của tôi bằng cách sử dụng refid cho filesets (đó là những gì tôi thực sự đã cố gắng để kéo vào một yếu tố). Sử dụng refid, thật đơn giản khi chỉ sử dụng thuộc tính macrodef, có thể có giá trị mặc định.

Một giải pháp thay thế khác là tạo macro cơ sở mới sử dụng phần tử và sau đó tôi có thể giữ macro hiện tại của mình bằng cách sử dụng macro đó ... nhưng vẫn không có cơ chế mặc định thực sự cho phần tử được tốt đẹp).

Vì vậy, Simon nhận được câu trả lời vì anh ấy đúng! Cảm ơn!

Trả lời

6

này là không thể dựa trên các tài liệu element yếu tố lồng nhau cho số macrodef task.

a Bugzilla issue open cho chính xác các chức năng mà bạn mô tả, tiếc là nó đã được mở từ năm 2004.

3

nếu bạn xác định macrodef của bạn như:

<macrodef name="testing"> 
    <element name="additional" optional="true"/> 
    <sequential> 
     <echo message="hello"/> 
     <additional/> 
    </sequential> 
</macrodef> 

invocation sau:

<target name="testing-call"> 
    <mylib:testing/> 
    <mylib:testing> 
     <additional> 
      <echo message="world!"/> 
     </additional> 
    </mylib:testing> 
</target> 

chí đầu ra:

[echo] hello 
[echo] hello 
[echo] world! 
+1

đánh giá cao, nhưng tôi đang tìm kiếm một mặc định thực tế, hành vi không bắt buộc ... Tôi muốn các nội dung của mặc định được thay thế hoàn toàn bằng bất kỳ thứ gì thực sự được chuyển vào, nhưng tất nhiên chỉ khi có nội dung được xác định. –

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