在Ant中,如何从exec获取返回值?

时间:2010-12-03 09:31:22

标签: ant

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

在此任务中,可执行文件将返回一个值,该值将指示我的应用程序的状态。我怎样才能获得Ant构建文件中返回的值。我将使用此值来确定某些行为。

2 个答案:

答案 0 :(得分:32)

使用exec任务的resultpropertyfailonerror属性,例如:

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

引用exec任务文档错误并返回代码

  

默认情况下,exec的返回码   被忽略了;当你设置   failonerror =“true”然后任何回报   代码信令故障(OS特定)   导致构建失败。   或者,您可以设置   resultproperty为a的名称   财产并将其分配给   结果代码(禁止不变性)   疗程)。

     

如果尝试启动该程序   失败,出现与OS相关的错误代码,   然后停止构建,除非   failifexecutionfails设置为false。   您可以使用它来运行程序if   它存在,但否则什么都不做。

     

这些错误代码是什么意思?好,   他们依赖于操作系统。在Windows上   你要看的盒子   文件;错误代码2表示'不   这样的程序',通常意味着它   不在路上。任何时候你看到   任何Ant任务都有这样的错误   通常不是Ant bug,而是一些   您计算机上的配置问题。

答案 1 :(得分:6)

如果进程返回失败代码,这是检查结果并显示执行的输出的通用方法。

<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>