我正在尝试执行一个程序,如果失败了,我有一个回退方法来获取所需的信息。并非所有使用此构建脚本的人都将安装该程序。我的任务如下:
<exec executable="runMe"
failonerror="false"
failifexecutionfails="false"
outputproperty="my.answer"
errorproperty="my.error"
error="myerror.txt" />
显然我误解了Ant手册,因为我认为通过设置错误或errorproperty错误将被重定向并且不会显示在屏幕上。
是否可以隐藏消息“执行失败:java.io.IOException:无法运行程序”runMe“...”?
或者,有没有办法确定该程序是否可以运行而不用检查它的存在?如果程序在用户的系统上,它将不会在用户与用户之间的相同位置。
谢谢,
保
答案 0 :(得分:1)
尝试使用ant-contrib的try / catch / finally命令。
http://ant-contrib.sourceforge.net/tasks/tasks/trycatch.html
答案 1 :(得分:0)
这样做的目的是在Ant中获取我的项目的Subversion修订版。一些开发人员安装了命令行Subversion而其他开发人员没有安装,所以我需要一种方法来测试svnversion的存在。
最后,我使用批处理文件来测试命令:
REM File checkCommand.bat
@echo off
%1 >NUL 2 >NUL
if errorlevel 1 goto fail
REM command succeeded
exit 0
:fail
REM command failed
exit 1
在我的Ant目标中,我这样运行:
<target name="checkForSvnversion">
<local name="cmdresult" />
<exec dir="." executable="com"
resultproperty="cmdresult"
failonerror="false"
failifexecutionfails="false">
<arg line="/c checkCommand.bat svnversion" />
</exec>
<condition property="exec.failed">
<equals arg1="${cmdresult}" arg2="1" trim="true" />
</condition>
</target>
我有两个依赖于此结果的目标:
<target name="getRevisionFromSvnversion" depends="checkForSvnversion"
unless="exec.failed">
etc etc
</target>
和
<target name="getRevisionFromEntries" depends="checkForSvnversion"
if="exec.failed">
etc etc
</target>
最后,我要求修改的任务是:
<target name="getRevision"
depends="getRevisionFromSvnversion,getRevisionFromEntries">
<echo>My rev is ${svn.revision}</echo>
</target>