Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ant中,如何从exec获取返回值?_Ant - Fatal编程技术网

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

在Ant中,如何从exec获取返回值?,ant,Ant,在此任务中,可执行文件将返回一个值,该值将指示我的应用程序的状态。如何获取Ant构建文件中返回的值。我将使用此值来确定某些行为。使用任务的resultproperty和failonerror属性,例如: <target name="CheckState"> <exec executable="${App.path}"/> </target> 从exec任务文档错误和返回代码中引用: 默认情况下,exec的返回代码 被忽视;当你设定 failon

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

使用任务的
resultproperty
failonerror
属性,例如:

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

exec
任务文档错误和返回代码中引用:

默认情况下,exec的返回代码 被忽视;当你设定 failonerror=“true”然后返回 代码信令故障(特定于操作系统) 导致生成失败。 或者,您可以设置 resultproperty指向的名称 属性,并将其指定给 结果代码(除非具有不变性,否则为 当然)

如果您试图启动程序 失败,错误代码与操作系统相关, 然后停止构建,除非 failifexecutionfails设置为false。 如果需要,您可以使用它来运行程序 它存在,但在其他方面什么也不做

这些错误代码是什么意思?好, 它们依赖于操作系统。在窗户上 盒子你得看看盒子 文档错误代码2表示“否” “这样的程序”,这通常意味着 不在路上。你看到什么时候 任何Ant任务都会出现这样的错误,它是 通常不是蚂蚁虫,而是一些 计算机上的配置问题


这里是一种通用方法,用于检查结果并仅在流程返回故障代码时显示执行的输出

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


谢谢。这管用!我尝试了outputproperty和errorproperty,但没有看到resultproperty。您是否将fork属性设置为true?根据O'Reilly的Ant:权威指南,resultproperty只有在FailOneError为false,fork为true时才有效。然而,fork似乎是Java元素的一个属性。@Jamil我不太明白。fork在exec中是隐式的,不需要指定它。@martinclayton啊,我不知道。谢谢。我假设我们不能用相同的输出属性运行两个连续的exec,对吗?这种不变性快把我逼疯了。。。我甚至试过ant contrib,但它也不起作用。有什么想法吗?
<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>