2009-06-01 21 views
50

Vorrei che il mio script di build agisse correttamente per gli ambienti di sviluppo e di rilascio.definire la proprietà ant dall'ambiente con il valore predefinito

Per questo vorrei definire una proprietà in formica, chiamare (ad esempio) fileTargetName

fileTargetName otterrà il suo valore dalla variabile d'ambiente RELEASE_VER se è disponibile, se non è disponibile otterrà il default valore della dev

Aiuto con la formica <condition><value></condition> & <property> per farlo funzionare è apprezzato.

risposta

71

Un esempio dal Ant documentation di come ottenere una variabile d'ambiente in una proprietà:

<property environment="env"/> 
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/> 
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/> 

Nel tuo caso, si usa ${env.RELEASE_VER}.

Poi per la parte condizionale, la documentazione here dice che ci sono tre possibili attributi:

 
Attribute Description            Required 
property The name of the property to set.      Yes 
value  The value to set the property to. Defaults to "true". No 
else  The value to set the property to if the condition  No 
      evaluates to false. By default the property will 
      remain unset. Since Ant 1.6.3 

metterlo insieme:

<property environment="env"/> 
<condition property="fileTargetName" value="${env.RELEASE_VER}" else="dev"> 
    <isset property="env.RELEASE_VER" /> 
</condition> 
+2

Ieri non sarei stato in grado di rispondere a questa domanda, ma SO mi ha costretto a ricercare. Evviva per StackOverflow! –

+1

Grazie! Uno strano comportamento di ant: Se il parametro di ambiente non è impostato, facendo un eco su $ {env.ANT_HOME} verrà stampato "$ {env.ANT_HOME}". Il richiamo ant antispam predefinito non lo imposta (almeno su questa macchina: RH WS 5, bash) –

0

Sono sicuro che ci sono modi più semplici rispetto a questo, ma che dire:

<project name="example" default="show-props"> 

    <property environment="env" /> 

    <condition property="fileTargetName" value="${env.RELEASE_VER}"> 
     <isset property="env.RELEASE_VER" /> 
    </condition> 

    <condition property="fileTargetName" value="dev"> 
     <not> 
      <isset property="env.RELEASE_VER" /> 
     </not> 
    </condition> 

    <target name="show-props"> 
     <echo>property is ${fileTargetName}</echo> 
    </target> 

</project> 
+0

Non conoscevo l'altro attributo da condizionare - @mmyers FTW – toolkit

+0

Immagino che dover cercare tutto nel manuale abbia i suoi vantaggi . :) –

38

Non è necessario utilizzare un <condition> per questo. Immobili a Formica sono immutable, quindi si può semplicemente utilizzare questo:

<property environment="env"/> 
<property name="env.RELEASE_VER" value="dev"/> 

Se è impostata la variabile RELEASE_VER ambiente, quindi la proprietà avrà il suo valore l'ambiente e la seconda <property> dichiarazione non avrà alcun effetto. In caso contrario, la proprietà verrà disattivata dopo la prima istruzione e la seconda istruzione imposterà il suo valore su "dev".

+0

Non proprio lo stesso effetto, ma immagino che potresti semplicemente aggiungere un altro per dargli il nome che vuoi, giusto? –

+0

Certo, potresti aggiungere una terza riga come . –

+0

Grazie, questa è una bella svolta sul problema. Per motivi di leggibilità, seguirò la condizione. –

Problemi correlati