2010-12-03 161 views
19
<target name="CheckState"> 
    <exec executable="${App.path}"/> 
</target> 

在此任務中,可執行應用程序將返回一個int值,它將指示我的應用程序的狀態。我怎麼能拿在ant腳本值返回的,我會用這個值來決定一些行爲提前如何從螞蟻腳本中的exec獲取返回值

回答

28

使用​​任務的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」時,任何返回 代碼信號故障(操作系統特定) 都會導致構建失敗。 或者,您可以將 resultproperty設置爲 屬性的名稱,並將其分配給 結果代碼(禁止不變, 課程)。

如果開始 失敗,並依賴於操作系統的錯誤代碼程序的嘗試,除非 failifexecutionfails設置爲false,然後停止構建。 如果存在 ,那麼可以使用它來運行程序,但除此之外什麼也不做。

這些錯誤代碼是什麼意思?那麼, 他們是操作系統依賴。在Windows 框中,您必須查看 文檔;錯誤代碼2意味着'沒有 這樣的程序',這通常意味着它不在路徑上 。任何時候你看到 這樣的錯誤來自任何Ant任務,它通常不是螞蟻bug,而是 配置問題在你的機器上。

+1

謝謝。這工作!我嘗試outputproperty和errorproperty,但沒有看到resultproperty。 – Hyden 2010-12-03 09:49:22

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>