2011-02-10 1 views
5

У меня есть кросс-платформенное приложение, и мы используем ant для создания разных вещей на разных платформах. Теперь появилось новое требование, и мне нужно делать что-то по-другому, если вы строите на Snow Leopard или позже против Leopard.Как построить муравьиную цель условно на Snow Leopard

Я посмотрел на http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script, который показывает, как отличить Windows, Macintosh и т.д., а также http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html, который показывает дополнительные свойства зева, как ${os.version}.

То, что я не понял, - это то, как я могу сравнить значение os.version, и если оно составляет 10,6 или выше, то Snow Leopard. Если бы я мог установить переменную snow_leopard в 1, когда на Snow Leopard я думаю, что смогу понять остальную часть ее.

ответ

6

Для этого вы можете использовать condition task. Доступными условиями, отличными от os, являются here.

Она будет работать точно так же, как и для «зева семьи»:

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

Но это означает, что вы должны поставить в дополнительном номере версии - версия строка должна точно совпадать.

Для «замутнения» альтернативы, вы можете использовать matches состояние, что-то вроде этого, возможно,

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

Когда OSX Lion выходит, вы можете расширить шаблон вроде этого:

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

Или ввести отдельную проверку для 10.7.

+0

Это хорошо. Я предпочел бы иметь возможность проверить, больше ли, но сопоставление шаблонов должно быть хорошо на практике. –

1

С помощью задачи <if>, предоставленной ant-contrib, вы можете достичь этого в некоторой степени, выполнив проверку равных для версии os.

... 
<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

Спасибо, я предпочитаю решение от мартина, но я буду помнить об этом. –