71 votes

Comment définir une propriété Ant uniquement si elle n'est pas définie

Je n'arrive pas à comprendre comment définir une propriété Ant à condition qu'elle ne l'ait pas été (c'est-à-dire qu'elle ne soit pas définie dans le fichier de propriétés et qu'elle devrait automatiquement être définie par défaut).

Jusqu'à présent, je n'ai que le code suivant:

 <condition property="core.bin" value="../bin">
    <isset property="core.bin"/>
</condition>
 

Mais cela ne semble fonctionner que si la valeur est définie dans une balise <property> .

Est-ce que quelqu'un sait comment définir conditionnellement une propriété pour la première fois si elle n'est pas définie?

114voto

Mnementh Points 19831

Vous pouvez simplement définir la propriété avec la propriété-tâche. Si la propriété est déjà définie, la valeur reste inchangée car les propriétés sont immuables.

Mais vous pouvez également inclure "non" dans votre condition:

 <condition property="core.bin" value="../bin">
   <not>  
      <isset property="core.bin"/>
   </not>
</condition>
 

63voto

Andy Lynch Points 744

Ant le fait par défaut. si la propriété est déjà définie; le redéfinir n'a aucun effet:

 <project name="demo" default="demo">
    <target name="demo" >
        <property name="aProperty" value="foo" />
        <property name="aProperty" value="bar" /> <!-- already defined; no effect -->
        <echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' -->
    </target>
</project>
 

Donne

    /c/scratch> ant -f build.xml
Buildfile: build.xml

demo:
     [echo] Property value is '${aProperty}'

BUILD SUCCESSFUL
Total time: 0 seconds
/c/scratch> ant -f build.xml
Buildfile: build.xml

demo:
     [echo] Property value is 'foo'

BUILD SUCCESSFUL
 

Les propriétés ne peuvent pas être redéfinies. Pour ce faire, vous devez utiliser quelque chose comme la tâche variable de ant-contrib .

6voto

skyline00 Points 1

Le moyen le plus simple de faire ce que vous voulez:

 <if>
    <not>
        <isset property="your.property"/>
    </not>
    <then>
        <property name="your.property" value="your.value"/>
    </then>
</if>
 

4voto

user3584056 Points 59

Il est possible d'utiliser "else" dans: https://ant.apache.org/manual/Tasks/condition.html pour servir votre objectif exact.

autre

 The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3
 

Alors changez pour:

 <condition property="core.bin" else="../bin">
    <isset property="core.bin"/>
</condition>
 

2voto

Nachtfrost Points 369

Les propriétés de Ant sont immuables. Une fois définis, ils ne peuvent pas être modifiés.

Mais le package Ant Contrib offre la tâche variable . Cela fonctionne comme une propriété mais les valeurs peuvent être modifiées et non définies. Exemple de la documentation de la tâche variable :

     <var name="x" value="6"/>
    <if>
        <equals arg1="${x}" arg2="6" />
        <then>
            <var name="x" value="12"/>
        </then>
    </if>
    <echo>${x}</echo>   <!-- will print 12 -->
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X