2009-04-08 68 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