Подтвердить что ты не робот

Как получить возвращаемое значение из exec в ant script

<target name="CheckState">
     <exec executable="${App.path}"/>
</target>

В этой задаче исполняемое приложение вернет значение int, которое укажет состояние моего приложения. Как я могу получить возвращаемое значение в ant script, я буду использовать это значение, чтобы определить некоторые поведения

Заранее спасибо

4b9b3361

Ответ 1

Используйте атрибуты resultproperty и failonerror exec, например:

<target name="CheckState">
     <exec executable="${App.path}"
           resultproperty="App.state"
           failonerror="false"/>
     <echo message="App state was: ${App.state}" />
</target>

Цитата из exec task docs Ошибки и коды возврата:

По умолчанию код возврата exec игнорируется; когда вы устанавливаете failonerror = "true", тогда любое возвращение сбой кода (для конкретной ОС) приводит к сбою сборки. Кроме того, вы можете установить resultproperty к названию собственности и присвоить его результата (исключая неизменность, из Конечно).

Если попытка запустить программу не работает с кодом ошибки, зависящей от ОС, затем останавливает сборку, если только Для параметра failifexecutionfails установлено значение false. Вы можете использовать это для запуска программы, если он существует, но в противном случае ничего не делает.

Что означают эти коды ошибок? Что ж, они зависят от ОС. В Windows коробки, вы должны посмотреть на документация; код ошибки 2 означает "нет такой программы", что обычно означает не находится на пути. Каждый раз, когда вы видите такая ошибка из любой задачи Ant, это обычно не ошибка Ant, но некоторые проблемы с конфигурацией на вашем компьютере.

Ответ 2

Вот общий способ проверить результат и отобразить результат выполнения, только если процесс возвращает код сбоя.

<property
    name="my.project.tmp.exec.output"
    value="${tmp.dir}/exec-output.txt"/>

<target
    name="my.project.my.task">
    <exec
        executable="${App.path}"
        output="${my.project.tmp.exec.output}"
        resultproperty="my.project.my.task.result"
        failonerror="false"/>
    <loadfile
        srcfile="${my.project.tmp.exec.output}"
        property="my.project.my.task.output"
    />
    <fail message="ERROR: ${my.project.my.task.output}">
        <condition>
            <not>
                <equals arg1="${my.project.my.task.result}" arg2="0"/>
            </not>
        </condition>
    </fail>
    <delete file="${my.project.tmp.exec.output}"/>
</target>