Ant的macrodef的默认元素?

时间:2009-04-08 18:53:31

标签: ant

我想创建一个宏:

<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 for filesets来解决我的特定问题(这实际上是我试图将其放入元素中)。使用refid,只需使用一个带有默认值的macrodef属性就很简单。

另一种选择是创建一个使用该元素的新基本宏,然后我可以将我现有的宏保留为使用那个...但是,仍然没有一个元素的真正默认机制(这将是好的)。

所以,西蒙得到答案,因为他是对的!谢谢!

2 个答案:

答案 0 :(得分:7)

根据macrodef task的嵌套element元素文档,这是不可能的。

您所描述的功能完全a Bugzilla issue open,不幸的是,自2004年以来一直开放。

答案 1 :(得分: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!