2009-06-01 21 views
50

Je voudrais que mon script de construction fonctionne correctement pour les environnements de développement et de développement.Définir la propriété ant de l'environnement avec la valeur par défaut

Pour cela, je voudrais définir une propriété en fourmi, appelez (par exemple) fileTargetName

fileTargetName va obtenir sa valeur de la variable d'environnement RELEASE_VER si elle est disponible, si elle est pas disponible, il obtiendra la valeur par défaut valeur du dev

Aide ant <condition><value></condition> & <property> pour le faire fonctionner est appréciée.

Répondre

71

Un exemple de la Ant documentation de la façon d'obtenir une variable d'environnement dans une propriété:

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

Dans votre cas, vous devez utiliser ${env.RELEASE_VER}.

Ensuite, pour la partie conditionnelle, la documentation here dit qu'il ya trois attributs possibles:

 
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 

Putting ensemble:

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

Hier, je n'aurais pas été capable de répondre à cette question, mais SO m'a obligé à faire des recherches. Hourra pour StackOverflow! –

+1

Merci! Un comportement étrange de ant: Si le paramètre d'environnement n'est pas défini, faire un écho sur $ {env.ANT_HOME} affichera "$ {env.ANT_HOME}". L'invocation de fourmis par défaut ne le définit pas (au moins sur cette machine: RH WS 5, bash) –

0

Je suis sûr qu'il ya des moyens plus simples que cela, mais qu'en est-il:

<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

Je ne connaissais pas l'attribut else à conditionner - @mmyers FTW – toolkit

+0

Je suppose que devoir tout regarder dans le manuel a ses avantages . :) –

38

Vous n'avez pas besoin d'utiliser un <condition> pour cela. Biens immobiliers à Ant sont immutable, vous pouvez simplement utiliser ceci:

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

Si la variable d'environnement RELEASE_VER est définie, la propriété obtiendra sa valeur de l'environnement et la deuxième déclaration <property> aura aucun effet. Dans le cas contraire, la propriété sera désactivée après la première instruction, et la deuxième valeur définira sa valeur sur "dev".

+0

Pas tout à fait le même effet, mais je suppose que vous pourriez simplement ajouter un autre pour lui donner le nom que vous voulez, non? –

+0

Bien sûr, vous pouvez ajouter une troisième ligne comme . –

+0

Merci, c'est une belle torsion sur la question. En raison de raisons de lisibilité, je vais m'en tenir à la condition. –