2011-02-10 12 views
5

Ho un'applicazione multipiattaforma e usiamo formica per costruire cose diverse su piattaforme diverse. Ora è venuto fuori un nuovo requisito e ho bisogno di fare le cose in modo diverso se si costruisce su Snow Leopard o più tardi contro Leopard.Come creare un obiettivo di formica su Snow Leopard

Ho visto http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script che mostra come distinguere tra Windows e Macintosh ecc. E http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html che mostra proprietà aggiuntive per os, come ${os.version}.

Quello che non ho capito è come posso confrontare il valore os.version e se è 10,6 o superiore fare la cosa Snow Leopard. Se potessi impostare una variabile da snow_leopard a 1 su Snow Leopard, penso che sarei in grado di calcolare il resto.

risposta

6

Per questo è possibile utilizzare lo condition task. Le condizioni disponibili, rilevanti per os sono here.

Funzionerebbe nello stesso modo come per 'famiglia os':

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

Ma che significa che si deve mettere nel numero di versione incrementale - la stringa della versione deve corrispondere esattamente.

Per un'alternativa 'sfocata', è possibile utilizzare una condizione matches, qualcosa di simile forse

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

Quando OSX Lion emerge, si può decidere di estendere il modello come il presente:

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

Oppure introdurre un controllo separato per 10.7.

+0

Questo è buono. Avrei preferito essere in grado di controllare se maggiore di, ma la corrispondenza del modello dovrebbe andar bene nella pratica. –

1

Utilizzando l'attività <if> fornita da ant-contrib, è possibile ottenere tale risultato effettuando un controllo di uguale per la versione 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

Grazie, preferisco la soluzione di martin, ma terrò questo a mente. –