web-dev-qa-db-fra.com

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

Je ne peux pas comprendre comment définir une propriété Ant à condition qu'elle ne soit pas définie (c'est-à-dire qu'elle n'est pas définie dans le fichier de propriétés et 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 un <property> tag.

Quelqu'un sait-il comment définir une propriété de manière conditionnelle pour la première fois si elle n'est pas définie actuellement?

68
user64133

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 état:

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

Ant le fait par défaut; si la propriété est déjà définie; la réinitialiser 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 tâche variable de ant-contrib .

62
Andy Lynch

La façon la 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>
6
skyline00

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

else

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>
3
user3584056

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

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

    <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 -->
2
Nachtfrost