2009-04-08 62 views
6

我想創建一個宏這樣:Ant的macrodef默認元素?

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

,然後使用它:

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

不過,我想指定一個默認的隱式元素...是這樣的:

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

所以我可以使用它作爲這樣的:

<testing/> 

除了我想更改默認元素。

這可能沒有通過Java類定義任務嗎?到目前爲止,我沒有看到任何說明如何做的文檔。


更新

我結束了使用REFID的文件集(這是我實際上是想拉成一個元素)解決我的具體問題。使用refid,只需使用一個具有默認值的macrodef屬性很簡單。

另一種選擇是創建一個使用該元素的新的基本宏,然後我可以保留現有的宏作爲使用該元素......但仍然沒有真正的元素默認機制對人好點)。

所以,西蒙得到了答案,因爲他是正確的!謝謝!

回答

3

如果你定義macrodef爲:

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

下面的調用:

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

將輸出:

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

賞識一直開着,但我想找一個實際違約,不是可有可無的行爲......我想默認的內容完全取代實際傳入的內容,但當然只有在定義了內容的情況下。 – 2009-04-08 20:15:36