2011-02-10 8 views
5

Tengo una aplicación multiplataforma y utilizamos una hormiga para construir cosas diferentes en diferentes plataformas. Ahora surgió un nuevo requisito y tengo que hacer las cosas de manera diferente si se basa en Snow Leopard o más tarde en Leopard.Cómo construir un objetivo de hormiga condicionalmente en Snow Leopard

He mirado en http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script que muestra cómo distinguir entre Windows y Macintosh, etc., y http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html que muestra propiedades adicionales para OS, como ${os.version}.

Lo que no he descubierto es cómo puedo comparar el valor de os.version y si es 10.6 o superior lo de Snow Leopard. Si pudiera establecer una variable snow_leopard en 1 cuando esté en Snow Leopard, creo que podría descifrar el resto.

Respuesta

6

Es posible utilizar el condition task para esto. Las condiciones disponibles, notables para os son here.

que funcionaría de la misma manera que para la "familia ós:

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

Pero eso significa que tienes que poner en el número de versión incremental de - la cadena de versión tiene que coincidir exactamente.

Por una alternativa 'más borrosa', se puede usar una condición matches, algo como esto quizá

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

Cuando OSX Lion emerge, es posible que desee ampliar el patrón como el siguiente:

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

O introduzca un cheque por separado para 10.7.

+0

Esto es bueno. Hubiera preferido poder verificar si es mayor que, pero la coincidencia de patrones debería funcionar bien en la práctica. –

1

Usando la tarea <if> proporcionada por ant-contrib, puede lograr esto hasta cierto punto, haciendo una comprobación igual para la versión del sistema operativo.

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

Gracias, prefiero la solución de Martin, pero lo tendré en cuenta. –

Cuestiones relacionadas