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

W tym zadaniu wykonywalna aplikacja zwróci wartość int, która będzie wskazywała stan mojej aplikacji. Jak mogę dostać zwrócona w wartości mrówek skrypcie będę używał tej wartości, aby określić pewne zachowaniaJak uzyskać wartość zwracaną przez exec w skrypcie ant

góry dzięki

Odpowiedz

28

Korzystanie z resultproperty i failonerror atrybuty zadania exec, np:

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

Cytowanie od exec docs zadaniowych błędy i kody powrotu:

Domyślnie kod powrotu exec jest ignorowany; po ustawieniu wartości failonerror = "true", jakikolwiek zwrotny błąd sygnalizacji (zależny od systemu operacyjnego) powoduje niepowodzenie kompilacji. Alternatywnie można ustawić wartość wyniku na nazwę właściwości i przypisać ją do kodu wyniku (blokowanie niezmienności kursu ).

Jeśli próba uruchomienia programu niepowodzeniem z kodem błędu zależny od systemu operacyjnego, następnie zatrzymuje build chyba failifexecutionfails jest ustawiona na false. Możesz użyć tego do uruchomienia programu, jeśli istnieje, ale poza tym nic nie rób.

Co oznaczają te kody błędów? Cóż, są zależne od systemu operacyjnego. Na pudełkach Windows należy zajrzeć do dokumentacji ; kod błędu 2 oznacza "nie ma takiego programu", co zwykle oznacza, że ​​ nie znajduje się na ścieżce. Za każdym razem, gdy widzisz taki błąd z dowolnego zadania Ant, jest to zwykle , ale nie jest to błąd Ant, ale jakiś problem konfiguracyjny na twoim komputerze.

+1

Dzięki. To działa! Próbowałem outputproperty i errorproperty, ale nie widziałem valueProperty. – Hyden

+0

Czy właściwość fork jest ustawiona na true? Według O'Reilly's _Ant: The Definitive Guide_, resultproperty zadziała tylko wtedy, gdy failonerror jest fałszywe _i_ fork jest prawdziwe. Widelec wydaje się być atrybutem elementu Java. –

+1

@Jamil Nie podążam za mną. Widelec jest niejawny w exec - nie trzeba go określać. –

6

Oto ogólny sposób, aby sprawdzić wynik i wyświetla wyjście wykonanie tylko jeśli proces zwraca kod błędu.

<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> 
Powiązane problemy