2011-10-17 49 views
6

Tôi có mục tiêu kiến ​​sau:Ant thất bại có điều kiện sau khi thất bại thực thi

<target name="refactor-ids"> 
    <echo>Refactor IDs</echo> 
    <exec executable="perl" dir="${basedir}"> 
     <arg value="script.pl" /> 
     <arg value="input.xml" /> 

    </exec> 
</target> 

Nếu thực thi không vì lý do nào (script.pl doesnt tồn tại, vv) xây dựng sẽ giải quyết thành công. Làm cách nào để tôi thiết lập thành công xây dựng có điều kiện khi thành công của tệp thực thi này?

Trả lời

11

chỉ cần thêm failonerror="true" tới phần tử exec

7

Tôi giả định đây là một tập lệnh kiến ​​và không phải là mục tiêu xsl.

Bạn có thể sử dụng failifexecutionfails thuộc tính của nhiệm vụ exec:

http://ant.apache.org/manual/Tasks/exec.html

Vì vậy, nếu thực hiện của bạn bị lỗi vì lý do bất kỳ xây dựng của bạn cũng sẽ thất bại. Điều này là theo mặc định là đúng. Bạn cũng có thể kiểm tra mã trở lại của thực thi của bạn bằng cách sử dụng thuộc tính:

failonerror 

resultproperty 

ví dụ

<target name="refactor-ids"> 
    <echo>Refactor IDs</echo> 
    <exec executable="perl" dir="${basedir}" failonerror="false" resultproperty="return.code"> 
     <arg value="script.pl" /> 
     <arg value="input.xml" /> 

    </exec> 
    <fail> 
    <condition> 
     <equals arg1="-1" arg2="${return.code}"/> 
    </condition> 
    </fail> 
</target> 
+0

Thanks for the tip, 'failonerror = "true"' 'là' những gì tôi đang tìm kiếm –

+3

Bạn có thể đơn giản hóa điều kiện thất bại với: ' ' – nikolay

1

Để thất bại ngay lập tức, sử dụng thuộc tính failonerror:

<exec dir="${basedir}" executable="sh" failonerror="true"> 
    <arg line="-c 'myscript'" /> 
</exec> 

Để thực hiện một số hành động khác trước khi thất bại, lưu trữ mã lối ra trong các thuộc tính resultproperty . Thông thường, 0 chỉ thành công, và 1 or higher indicates an error:

<exec dir="${basedir}" executable="sh" failonerror="false" resultproperty="exitStatusCode"> 
    <arg line="-c 'myscript'" /> 
</exec> 

<!-- Do some other stuff before failing --> 

<fail> 
    <condition> 
     <not> 
      <equals arg1="0" arg2="${exitStatusCode}"/> 
     </not> 
    </condition> 
</fail> 
+0

Điều này cũng cho phép bạn thêm thông báo cho biết tại sao bản dựng không thành công bằng cách sử dụng tham số' message' trên tác vụ 'fail'. (Xem https://ant.apache.org/manual/Tasks/fail.html) –