与 XML Ant 宏相反,用 Java 实现的 Ant 任务具有为缺少的属性提供稍微不同的行为的特性。
在我的例子中,我试图<testng>
用一个宏来包装用 Java 实现的 Ant 任务。具体来说,我想通过一些小的调整来公开 TestNG ant 任务提供的大部分功能。
在其他类似的属性中,timeOut
似乎有点难以重现,因为它的省略与指定和空字符串的行为不同。
这是我的宏定义的简化版本:
<macrodef name="my-wrapper">
<attribute name="timeOut" default=""/>
<element name="nested-elements" optional="true" implicit="true"/>
<sequential>
<testng timeOut="@{timeOut}">
<nested-elements/>
</testng>
</sequential>
</macrodef>
失败是因为 Ant 尝试将值转换为整数:
Can't assign value '' to attribute timeout, reason: class java.lang.NumberFormatException with message 'For input string: ""'
有人建议我使用<augment>
,这似乎是解决此问题的方法。但是,我不明白应该如何使用它:
<macrodef name="my-wrapper">
<attribute name="timeOut" default=""/>
<element name="nested-elements" optional="true" implicit="true"/>
<sequential>
<augment unless:blank="timeOut" id="invocation" timeOut="@{timeOut}"/>
<testng id="invocation">
<nested-elements/>
</testng>
</sequential>
</macrodef>
由于前向引用,上述失败:
java.lang.IllegalStateException: Unknown reference "invocation"
颠倒 and 的顺序<testng>
并<augment>
没有真正起作用,因为任务在被扩充<testng>
之前开始执行。
我需要的是一种有条件地将 XML 属性添加到任务调用的方法。这只能使用 Ant XML 语法吗?