Условное задание на сбой exec в Ant - PullRequest
2 голосов
/ 17 июня 2011

У меня есть несколько модульных тестов, выполняющихся через Ant, и я хотел бы иметь возможность запустить некоторый код очистки, если модульные тесты не пройдут. Я искал какой-то блок "наконец-то", но мне не повезло найти его. Я пытался использовать errorproperty и if в задачах, но ant принимает только «true», «on» и «yes» в качестве истинных свойств. Успешно выполненное задание (по крайней мере, в Unix) возвращает 0, поэтому мне пришлось создать невероятно сложный аппарат:

<project name="TestBuild" default="build" basedir=".">
<target name="build" depends="truth,checkresult,cleanup" />

<target name="truth">
    <echo message="Running Truth" />
    <exec executable="false" errorproperty="testfailure"/>
</target>
<target name="checkresult">
    <condition property="testfailed">
        <not>
            <equals arg1="${testfailure}" arg2="0" />
        </not>
    </condition>
</target>
<target name="cleanup" if="testfailed">
    <echo message="cleanup" />
    <fail />
</target>

Есть ли более простой способ сделать это? С одной стороны, это требует выполнения задач, что кажется смешным. Это также означает, что мне придется вызывать их оба после каждого блока модульных тестов, потому что я, очевидно, не могу установить failonerror, как обычно. В общем, это хакерское, не элегантное решение, и я надеюсь, что у кого-то есть лучшее.

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Две возможности

-1-
использовать некоторую конструкцию try / catch / finally для определенных частей вашего скрипта
вам нужен плагин Ant, который обеспечивает эти функции, например, = 1005 *
Flaka
Antcontrib / Антилопа

    <trycatch>
     <try>
      <exec .../>
     </try>
     <catch>
      do your cleanup here
      and afterwards don't forget to fail
      </fail message="......."/>
     </catch>
      optionally you may use a finally section also
     <finally>
      ..
     </finally>
   </trycatch>

-2-
использовать buildlistener для всего сценария (СОЗДАЙТЕ УСПЕШНО, СОЗДАЙТЕ НЕ УДАЛЕНО)

У Кева Джексона есть хороший пример exec-слушателя в его презентации, = http://people.apache.org/~kevj/ossummit/extending-ant.html (источники exec-слушателя включенына слайдах)

Вы можете запускать определенные задачи в зависимости от результата сборки после того, как сборка завершена

<!-- taskcontainer -->    
<exec-listener onSuccess="true|false">
..

 your stuff goes here 
..
</exec-listener>
0 голосов
/ 17 июня 2011

Ant contrib имеет концепцию try-catch-finally.Однако это, наконец, для конкретного блока, а не для всего сценария.

...