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?
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>
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 .
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>
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>
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 -->