2011-02-10 34 views
5

Tôi có một ứng dụng đa nền tảng và chúng tôi sử dụng kiến ​​để xây dựng những thứ khác nhau trên các nền tảng khác nhau. Bây giờ một yêu cầu mới đã xuất hiện và tôi cần phải làm những việc khác nhau nếu xây dựng trên Snow Leopard hoặc sau đó với Leopard.Làm thế nào để xây dựng một mục tiêu ant có điều kiện trên Snow Leopard

Tôi đã xem http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script cho biết cách phân biệt giữa Windows và Macintosh, v.v. và http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html hiển thị các thuộc tính bổ sung cho os, như ${os.version}.

Điều tôi chưa biết là làm cách nào tôi có thể so sánh giá trị os.version và nếu điều đó là 10.6 hoặc cao hơn thì điều Snow Leopard. Nếu tôi có thể thiết lập một biến snow_leopard đến 1 khi trên Snow Leopard tôi nghĩ rằng tôi sẽ có thể tìm ra phần còn lại của nó ra.

Trả lời

6

Bạn có thể sử dụng condition task cho việc này. Các điều kiện khả dụng, đáng chú ý cho oshere.

Nó sẽ làm việc theo cách tương tự như đối với 'gia đình os':

<condition property="isSnowLeopard"> 
    <os family="mac" version="10.6.6" /> 
</condition> 

Nhưng điều đó có nghĩa là bạn cần phải đặt trong số phiên bản gia tăng - chuỗi phiên bản có khớp chính xác.

Để có lựa chọn 'fuzzier', bạn có thể sử dụng một điều kiện matches, một cái gì đó như thế này có lẽ

<condition property="isSnowLeopard"> 
    <matches string="${os.version}" pattern="^10.6." /> 
</condition> 

Khi OSX Lion xuất hiện, bạn có thể muốn mở rộng mô hình như này:

<condition property="isSnowLeopardOrGreater"> 
    <matches string="${os.version}" pattern="^10.[67]." /> 
</condition> 

Hoặc giới thiệu séc riêng cho 10.7.

+0

Điều này là tốt. Tôi đã có thể ưa thích để có thể kiểm tra nếu lớn hơn, nhưng phù hợp với mô hình nên làm ok trong thực tế. –

1

Sử dụng tác vụ <if> được cung cấp bởi ant-contrib, bạn có thể đạt được điều này trong phạm vi bằng cách thực hiện kiểm tra bằng cho phiên bản hệ điều hành.

... 
<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
     <pathelement location="/location/of/ant-contrib-1.0b3.jar"/> 
    </classpath> 
</taskdef> 
<target name="oscheck"> 
    <property name="osver" value="${os.version}"/> 
    <if> 
     <equals arg1="${os.version}" arg2="6.1"/> 
     <then> 
      <echo message="Windows 7"/> 
      ... 
     </then> 
    </if> 
</target> 
... 
+0

Cảm ơn, tôi thích giải pháp từ martin hơn, nhưng tôi sẽ ghi nhớ điều này. –

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