2011-02-10 15 views
5

Mam wieloplatformową aplikację i używamy mrówki do budowania różnych rzeczy na różnych platformach. Teraz pojawił się nowy wymóg i muszę robić różne rzeczy, jeśli opiera się na Snow Leopard lub późniejszym kontra Leopard.Jak warunkowo zbudować mrówkę na Snow Leopard

Szukałem na http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script co pokazuje, jak odróżnić Windows i Macintosh itp i http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html który pokazuje dodatkowe właściwości dla OS, jak ${os.version}.

Nie wiedziałem, jak mogę porównać wartość os.version, a jeśli jest to 10,6 lub więcej, to jest rzeczą Snow Leopard. Gdybym mógł ustawić zmienną snow_leopard na 1, gdy na Snow Leopard, myślę, że będę w stanie wymyślić resztę.

Odpowiedz

6

Możesz użyć do tego celu condition task. Dostępne warunki, znaczące dla os, to here.

To będzie działać w taki sam sposób, jak w przypadku „rodziny os”:

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

Ale to oznacza, że ​​trzeba umieścić w bieżących numer wersji - wersja łańcuch musi dokładnie odpowiadać.

Przez „fuzzier” alternatywa, można użyć matches warunek, coś takiego może

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

Kiedy OSX Lion wyłania, można przedłużyć wzorzec, jak ten:

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

Lub wprowadzić osobną kontrolę dla 10.7.

+0

To jest dobre. Wolałbym móc sprawdzić, czy jest większy niż, ale dopasowywanie wzorców powinno w praktyce przydać się dobrze. –

1

Wykonując zadanie ant-contrib, można to osiągnąć w pewnym stopniu, wykonując test równości dla wersji 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

Dzięki, wolę rozwiązanie od Martina, ale będę o tym pamiętać. –

Powiązane problemy