2011-07-20 23 views
6

Tôi đang gọi tệp lô bằng cách sử dụng tác vụ Ant exec và đặt kết quả là resultpropery. Nhưng giá trị trả về không bao giờ đến Ant. Dưới đây là mã của tôiAnt exec resultproperty không hoạt động

<property name="BuildErrorCode" value="abc"/> 
<exec executable="cmd" resultproperty="BuildErrorCode" failonerror="false" 
     dir="C:\workspace\build\"> 
    <arg value="/c"/> 
    <arg value="cmake_cross_compile.bat"/> 
</exec> 

<echo message="Error Code:=${BuildErrorCode}" /> 

tôi thoát khỏi kịch bản hàng loạt của tôi bằng cách:

if %errorlevel% neq 0 exit /b %errorlevel% 

Khi kịch bản chạy, tôi luôn luôn nhận abc như giá trị thay vì giá trị trả về từ tập tin batch. tập tin thực thi của tôi trả 2 cho bây giờ và tôi phải dừng việc xây dựng

Tôi muốn làm như sau:

  1. Nếu giá trị trả về là <> 0 sau đó tôi đã làm cho việc xây dựng thất bại mà không phải là xảy ra bây giờ.

Bất kỳ ý tưởng nào về cách tôi có thể giúp ông trả về giá trị và làm cho kiến ​​xây dựng không thành công?

Trả lời

5

Nhiệm vụ execresultproperty sẽ chụp mã thoát của trình thông dịch cmd. Cách bạn đang gọi thoát trong tập tin batch mặc dù không phải là chấm dứt cmd, nó chỉ thoát khỏi kịch bản. Mã thoát từ cmd sẽ không bị ảnh hưởng và giữ nguyên 0. Nếu bạn chỉ cần xóa tùy chọn \b của lệnh thoát, bạn cũng sẽ kết thúc thông dịch viên và xem mã thoát mà bạn đã cung cấp.

if %errorlevel% neq 0 exit %errorlevel% 

Để thất bại, bạn có thể sử dụng một fail task, có lẽ một cái gì đó như thế này:

<fail message="cmake_cross_compile.bat exited non-zero"> 
    <condition> 
     <not> 
     <equals arg1="${BuildErrorCode}" arg2="0"/> 
     </not> 
    </condition> 
</fail> 

Hoặc bạn có thể thiết lập failonerror="true" trong nhiệm vụ exec thất bại ngay lập tức.

+0

OK một điều nữa là, tôi có thể làm gì trong ANT Build.xml với giá trị retun để tạo báo cáo xây dựng ANT là lỗi – KK99

+0

@Karthik - câu trả lời được cập nhật với các ý tưởng không thành công. –

+0

Cảm ơn Martin. 'exit% errorlevel%' hoạt động ngay bây giờ. Tôi có thể nhận được giá trị trong ANT.' 'hoạt động hoàn toàn tốt đẹp. Tôi có thể báo cáo việc xây dựng là thất bại, đó là những gì tôi muốn. Cảm ơn bạn cả hai – KK99

8

Nếu bạn chạy các kịch bản xây dựng trong chế độ verbose (ant -v), bạn sẽ thấy dòng

Override ignored for property "BuildErrorCode" 

Về cơ bản một lần một đặc tính kiến ​​đã được thiết lập giá trị của nó không thể thay đổi. Điều này SO question có chi tiết.

Cách giải quyết có thể không phải là declare thuộc tính.

... 
    <!--property name="BuildErrorCode" value="abc"/--> 
    <exec executable = "cmd" resultproperty="BuildErrorCode" failonerror="false" dir="D:\work"> 
     <arg value="/c"/> 
     <arg value="cmake_cross_compile.bat"/> 
    </exec> 
    ... 
+0

Cảm ơn Raghuram. bây giờ atleats tôi nhận được giá trị 0 mặc dù tôi cần phải nhận được 2. Tôi sẽ kiểm tra tập tin thực thi một lần nữa. thanks – KK99

Các vấn đề liên quan