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

Trong tác vụ này, ứng dụng thực thi sẽ trả về giá trị int cho biết trạng thái ứng dụng của tôi. Làm thế nào tôi có thể có được trở về giá trị trong kịch bản kiến, tôi sẽ sử dụng giá trị này để xác định một số hành viCách nhận giá trị trả lại từ một exec trong tập lệnh ant

Cảm ơn trước

Trả lời

28

Sử dụng resultpropertyfailonerror thuộc tính của nhiệm vụ exec, ví dụ:

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

Trích dẫn từ exec docs nhiệm vụ lỗi và gửi lại mã:

Theo mặc định, mã trả về của một exec bị bỏ qua; khi bạn đặt failonerror = "true" thì bất kỳ trở lại nào lỗi báo hiệu mã (OS cụ thể) làm cho bản dựng không thành công. Hoặc, bạn có thể đặt kết quảproperty với tên của một tài sản và được gán cho mã kết quả (cấm không đổi, của khóa học).

Nếu cố gắng khởi động chương trình không thành công với mã lỗi phụ thuộc hệ điều hành, sau đó tạm dừng bản dựng trừ khi failifexecutionfails được đặt thành false. Bạn có thể sử dụng chương trình đó để chạy chương trình nếu có chương trình đó, nhưng không làm gì cả.

Các mã lỗi này có ý nghĩa gì? Vâng, chúng phụ thuộc vào hệ điều hành. Trên các ô Windows bạn phải xem tài liệu ; mã lỗi 2 có nghĩa là 'không chương trình như vậy', thường có nghĩa là nó không có trên đường dẫn. Bất cứ lúc nào bạn thấy lỗi như vậy từ bất kỳ tác vụ Ant nào, nó là thường không phải là lỗi Ant, nhưng một số vấn đề về cấu hình trên máy của bạn.

+1

Cảm ơn. Tôi đã thử outputproperty và errorproperty, nhưng không thấy resultproperty. – Hyden

+0

Bạn có thuộc tính ngã ba được đặt thành true không? Theo O'Reilly's _Ant: The Definitive Guide_, resultproperty sẽ chỉ hoạt động nếu failonerror là false _and_ fork là true. Tuy nhiên, ngã ba có vẻ là một thuộc tính của phần tử Java. –

+1

@Jamil Tôi không thực sự theo dõi. Một ngã ba là ẩn trong một exec - không cần phải xác định nó. –

6

Đây là cách chung để kiểm tra kết quả và hiển thị đầu ra của việc thực hiện chỉ nếu quá trình trả về mã lỗi.

<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> 
Các vấn đề liên quan