如何从exec获取返回值?

Hyd*_*den 24 ant

<target name="CheckState">
     <exec executable="${App.path}"/>
</target>
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ton 33

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

<target name="CheckState">
     <exec executable="${App.path}"
           resultproperty="App.state"
           failonerror="false"/>
     <echo message="App state was: ${App.state}" />
</target>
Run Code Online (Sandbox Code Playgroud)

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

默认情况下,exec的返回码被忽略; 当您设置failonerror ="true"时,任何返回代码信令失败(特定于操作系统)都会导致构建失败.或者,您可以将resultproperty设置为属性的名称,并将其分配给结果代码(当然,除了不变性).

如果启动程序的尝试因操作系统相关的错误代码而失败,则除非将failifexecutionfails设置为false,否则将暂停构建.您可以使用它来运行程序(如果存在),否则不执行任何操作.

这些错误代码是什么意思?嗯,他们依赖于操作系统.在Windows框中,您必须查看文档; 错误代码2表示"没有这样的程序",这通常意味着它不在路径上.每当您从任何Ant任务中看到这样的错误时,它通常不是Ant错误,而是您计算机上的某些配置问题.


J P*_*J P 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>
Run Code Online (Sandbox Code Playgroud)