Как выполнить команду Ant в случае сбоя задачи? - PullRequest
13 голосов
/ 19 июня 2009

Предположим, у меня есть какая-то задача Ant - скажем, javac или junit - если какая-либо из них не удалась, я хочу выполнить задачу, но если они успешны, у меня нет.

Есть идеи, как это сделать?

Ответы [ 4 ]

15 голосов
/ 19 июня 2009

Например, в вашей цели junit вы можете установить failureProperty:

<target name="junit" depends="compile-tests" description="Runs JUnit tests">
    <mkdir dir="${junit.report}"/>
    <junit printsummary="true" failureProperty="test.failed">
        <classpath refid="test.classpath"/>
        <formatter type="xml"/>
        <test name="${test.class}" todir="${junit.report}" if="test.class"/>
        <batchtest fork="true" todir="${junit.report}" unless="test.class">
            <fileset dir="${test.src.dir}">
                <include name="**/*Test.java"/>
                <exclude name="**/AllTests.java"/>
            </fileset>
        </batchtest>
    </junit>
</target>

Затем создайте цель, которая запускается только в том случае, если установлено свойство test.failed, но не завершается в конце:

<target name="otherStuff" if="test.failed">
    <echo message="I'm here. Now what?"/>
    <fail message="JUnit test or tests failed."/>
</target>

Наконец, свяжите их вместе:

<target name="test" depends="junit,otherStuff"/>

Затем просто вызовите цель test, чтобы запустить ваши тесты JUnit. Цель junit будет запущена. Если произойдет сбой (сбой или ошибка), будет установлено свойство test.failed, и будет выполнено тело цели otherStuff.

Задача javac поддерживает атрибуты failonerror и errorProperty, которые можно использовать для получения аналогичного поведения.

6 голосов
/ 02 июня 2012

как упомянуто от Кая:

ant-contrib имеет задачу trycatch.

Но вам нужна последняя версия 1.0b3. А затем используйте

<trycatch>
    <try>
        ... <!-- your executions which may fail -->
    </try>
    <catch>
        ... <!-- execute on failure -->
        <throw message="xy failed" />
    </catch>
</trycatch>

Хитрость заключается в том, чтобы снова выдать ошибку, чтобы указать на сломанную сборку.

1 голос
/ 19 июня 2009

ant-contrib имеет задачу trycatch.

0 голосов
/ 19 июня 2009

Задайте свойство в задаче, для которого вы хотите проверить наличие ошибок, а затем напишите вторую задачу, чтобы она выполнялась, если свойство не установлено. Я не помню точные синтаксисы для build.xml, или я бы привел примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...