2011-09-30 27 views
6

Làm thế nào trên trái đất để bạn kiểm tra một thuộc tính số nhỏ hơn trong Apache Ant?Apache Ant Ít hơn

<property name="small" value="15"/> 
<property name="big" value="156"/> 
<fail message="small is less than big!"> 
    <condition> 
    <lessthan val1="${small}" val2="${big}"/> 
    </condition> 
</fail> 

Từ những gì tôi thấy (Tôi mới sử dụng Ant), bạn chỉ có thể làm <equal/>?

+0

Tương tự như http://stackoverflow.com/questions/4639902/apache-ant-comparing-properties-variables thật đáng buồn làm cho nó có vẻ như bạn sẽ phải nhúng một số tập lệnh. – ccoakley

+0

Cảm ơn ccoakley. Đáng tiếc tôi đặt ít hơn trong tiêu đề thay vì lớn hơn so với tìm kiếm Stackoverflow đã không nhặt nó lên: (bình chọn để đóng như trùng lặp. –

Trả lời

4

Bạn có thể sử dụng <scriptcondition> (xem http://ant.apache.org/manual/Tasks/conditions.html).

Đọc tài liệu cẩn thận vì cần cài đặt thêm phụ thuộc jar vào kiến.

Tình trạng có thể nhìn như thế (không kiểm tra):

<scriptcondition language="javascript"> 
    var small = parseInt(project.getProperty("small")); 
    var big = parseInt(project.getProperty("big")); 

    self.setValue(small < big); 
</scriptcondition> 
+0

Tôi thích giao diện của nhiệm vụ 'isgreaterthan' trong Ant-Contrib (đã sử dụng nó), Tôi không thể làm việc ra làm thế nào để sử dụng nó mặc dù –

+0

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html u đã thử này? – FailedDev

+1

@ MattClarkson Bạn có thể cố gắng sử dụng '< isgreaterthan> 'trong một nhiệm vụ' '? Từ liên kết mà @FailedDev cung cấp:" Thật không may, chúng không thể được sử dụng trong tác vụ ". – Jesse

2

Cheers JB Nizet, cuối cùng đã có.

<!-- Test the Ant Version --> 
<property name="burning-boots-web-build.required-ant-version" value="1.8.2"/> 
<script language="javascript"> 
    <![CDATA[ 
     var current  = project.getProperty("ant.version").match(/([0-9](\.)?)+/)[0].replace(/\./g,""); 
     var required = project.getProperty("burning-boots-web-build.required-ant-version").match(/([0-9](\.)?)+/)[0].replace(/\./g,""); 
     project.setProperty('ant.valid-version', current < required ? "false" : "true"); 
    ]]> 
</script> 
<fail message="This build requires Ant version ${burning-boots-web-build.required-ant-version}."> 
    <condition> 
     <isfalse value="${ant.valid-version}"/> 
    </condition> 
</fail> 
0

A "ít hơn" comparioson của tính là không thể mà không cần một trong hai nhiệm vụ tùy chỉnh hoặc một kịch bản nhúng.

Nhưng trong hầu hết các trường hợp, bạn có thể lấy đi bằng cách áp dụng thử nghiệm không cho thuộc tính mà là nguồn của các giá trị. Trong một hệ thống xây dựng, những "nguồn" này thường là các tệp. Trên các tệp, bạn có thể sử dụng isfileselectedcondition cùng với selector. Hầu hết các bộ chọn chấp nhận các thuộc tính when như less, more hoặc equal.

Hướng dẫn cho điều kiện isfileselected hiển thị ví dụ.

0

Tiện ích bổ sung Ant Flaka cung cấp tác vụ không thành công đánh giá biểu thức EL, f.e. :

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka"> 
<property name="small" value="15"/> 
<property name="big" value="156"/> 
<fl:fail message="small is less than big!" test="small lt big"/> 
</project> 

đầu ra:

BUILD FAILED 
/home/rosebud/workspace/Ant/demo.xml:7: small is less than big! 

thấy Flaka manual để biết thêm chi tiết

2

Đây là việc sử dụng <isgreaterthan> nhiệm vụ điều kiện với bất cứ kịch bản:

<if> 
    <isgreaterthan arg1="100" arg2="10"/> 
    <then> 
     <echo>Number 100 is greater than number 10</echo> 
    </then> 
</if> 

Ngoài ra, arg1, Giá trị arg2 có thể là biến bất động sản.

Lưu ý: <isgreaterthan> là một điều kiện bổ sung có sẵn với Ant-contrib:

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html

+0

Chắc chắn điều này có hiệu quả không? Từ tài liệu:" Những điều kiện này phù hợp để sử dụng trong Thật không may, chúng không thể được sử dụng trong tác vụ ... "Khi tôi thử điều này, bản dựng không thành công:" nếu không hỗ trợ phần tử "isgreaterthan" lồng nhau " –

0

Trên thực tế, câu trả lời được cung cấp bởi @GnanaPrakash là không đầy đủ. Từ tài liệu Ant Contrib:

Các điều kiện này phù hợp để sử dụng trong phần tử. Thật không may, họ không thể được sử dụng trong các nhiệm vụ < trạng >, mặc dù tất cả các điều kiện cho công việc có thể được sử dụng với <bool> và <bool> thể được sử dụng bất cứ nơi nào mà < trạng > có thể được sử dụng.

Vì vậy, islessthan hoặc isgreaterthan yếu tố thay thế phải được bao bọc trong một phần tử bool như vậy:

<property name="small" value="15" /> 
<property name="big" value="156" /> 
<if> 
    <bool> 
     <islessthan arg1="${small}" arg2="${big}"/> 
    </bool> 
    <then> 
     <echo message="small is less than big!" /> 
    </then> 
    <else> 
     <echo message="big is less than small!" /> 
    </else> 
</if> 

Nếu bạn không làm theo cách này bạn sẽ nhận được một lỗi nói :

if doesn't support the nested "islessthan" element. 
+0

Lưu ý nhỏ: ently này không làm việc với antcontrib-1.0b3: https://stackoverflow.com/a/12391161/2581587 –

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