Ant exec resultproperty не работает - PullRequest
7 голосов
/ 20 июля 2011

Я вызываю командный файл с помощью задачи Ant exec и устанавливаю результат в resultpropery.Но возвращаемое значение никогда не приходит к муравью.Ниже приведен мой код

<property name="BuildErrorCode" value="abc"/>
<exec executable="cmd" resultproperty="BuildErrorCode" failonerror="false"
      dir="C:\workspace\build\">
    <arg value="/c"/>
    <arg value="cmake_cross_compile.bat"/>
</exec>

<echo message="Error Code:=${BuildErrorCode}" />

Я выхожу из моего пакетного сценария следующим образом:

if %errorlevel% neq 0 exit /b %errorlevel%

Когда сценарий выполняется, я всегда получаю abc в качестве значения вместо возвращаемого значения из пакетного файла.Мой пакетный файл сейчас возвращает 2, и мне нужно остановить сборку

Я хочу сделать следующее:

  1. Если возвращаемое значение <> 0, тогда я долженсделать сборку неудачной, чего сейчас не происходит.

Есть идеи, как я могу получить возвращаемое значение и заставить сборку муравей потерпеть неудачу?

Ответы [ 2 ]

8 голосов
/ 20 июля 2011

Если вы запустите скрипт сборки в подробном режиме (ant -v), вы заметите строку

Override ignored for property "BuildErrorCode"

По существу, после того, как свойство муравья установлено, его значение не может быть изменено. Этот ТАК вопрос содержит подробности.

Возможный обходной путь - не declare свойство.

    ...
    <!--property name="BuildErrorCode" value="abc"/-->
    <exec executable = "cmd" resultproperty="BuildErrorCode" failonerror="false" dir="D:\work">
        <arg value="/c"/>
        <arg value="cmake_cross_compile.bat"/>
    </exec>
    ...
7 голосов
/ 20 июля 2011

Задача exec resultproperty захватит код завершения интерпретатора cmd. То, как вы вызываете exit в командном файле, хотя и не завершает команду cmd, а только завершает работу сценария. Код выхода из cmd останется неизменным и останется нулевым. Если вы просто удалите опцию \b команды выхода, вы также прекратите работу интерпретатора и увидите, что переданный вами код выхода распространяется.

if %errorlevel% neq 0 exit %errorlevel%

Чтобы потерпеть неудачу, вы можете использовать fail задачу , возможно, что-то вроде этого:

<fail message="cmake_cross_compile.bat exited non-zero">
    <condition>
       <not>
         <equals arg1="${BuildErrorCode}" arg2="0"/>
       </not>
     </condition>
</fail>

Или вы можете установить failonerror="true" в задаче exec на немедленный сбой.

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