Задачи Ant, реализованные в Java, в отличие от макросов XML Ant, имеют особенность, заключающуюся в несколько отличном поведении для отсутствующих атрибутов.
В моем случае я пытаюсь обернуть <testng>
Antзадача, реализованная на Java, с помощью макроса.В частности, я хотел бы раскрыть большинство функциональных возможностей, предлагаемых муравьиной задачей TestNG, с некоторыми незначительными изменениями.
Среди других подобных атрибутов 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"
Инвертирование порядка <testng>
и <augment>
на самом деле не работает, потому что задача <testng>
начинает выполняться до того, как будет расширенной .
Мне нужен способ условного добавления атрибута XML к вызову задачи.Это возможно только при использовании синтаксиса Ant XML?