Existe-t-il un moyen de réaffecter la valeur de la tâche Ant property
? Ou y a-t-il une autre tâche disponible à cette fin?Comment écraser la propriété dans Ant?
Répondre
Selon la manière dont vous souhaitez utiliser la propriété modifiée, vous pouvez utiliser macrodef
s.
Par exemple, au lieu d'écrire ce qui suit:
<target name="foo">
<echo message="${my_property}"/>
</target>
et ne pas être en mesure d'appeler ant foo
avec un autre message, vous pouvez écrire:
<macrodef name="myecho">
<attribute name="msg"/>
<sequential>
<echo message="@{msg}"/>
</sequential>
</macrodef>
<target name="foo">
<myecho msg="${my_property}"/>
<property name="my_property2" value="..."/>
<myecho msg="${my_property2}"/>
</target>
ant-contrib'sVariable
tâche peut faire:
<property name="x" value="6"/>
<echo>${x}</echo> <!-- will print 6 -->
<var name="x" unset="true"/>
<property name="x" value="12"/>
<echo>${x}</echo> <!-- will print 12 -->
Non recommandé, cependant, il peut conduire à d'étranges effets secondaires si une partie de vos scripts Ant prennent des valeurs de propriété immuables, et d'autres parties rompent cette hypothèse.
Les propriétés sont immuables dans ant.
Vous pouvez être intéressé par ant-contrib's var
task.
<var name="my_var" value="${my_property}" />
<echo>Addressed in the same way: ${my_var} and ${my_property}</echo>
Les propriétés sont immuables dans ant. Mais ce n'est pas une limitation aussi terrible que cela puisse paraître. Il y a une classe entière de langages de programmation où (la plupart) des variables sont constantes et pourtant ils obtiennent des choses ceci est appelé «programmation fonctionnelle».
Vous pouvez «modifier» les valeurs utilisées par différentes tâches en dérivant de nouvelles propriétés modifiées ou en modifiant les paramètres lors de l'appel de tâches avec les tâches subant
ou antcall
. Si vous êtes créatif, vous pouvez généralement trouver un moyen de résoudre votre problème.
c'est très utile si vous donnez un exemple et expliquez plus. –
Vous ne pouvez pas modifier la valeur d'une propriété dans Ant.
Si vous avez des tâches Ant que vous souhaitez exécuter de façon répétée en transmettant différentes valeurs, je recommande le macrodef
task car vous pouvez exécuter plusieurs fois la même macro en transmettant différents attributs.
Par exemple:
<macrodef name="copythings">
<attribute name="todir"/>
<sequential>
<copy todir="@{todir}">
<fileset dir="${src}">
<exclude name='**/*svn' />
</fileset>
</copy>
</sequential>
</macrodef>
<copythings todir="/path/to/target1"/>
<copythings todir="/path/to/target2"/>
Notez que ${property}
est utilisé pour référencer des propriétés et @{attribute}
permet de référencer les attributs transmis à la tâche <macrodef>
.
Depuis Ant 1.8, vous pouvez utiliser le tâche "locale" pour changer la valeur d'une propriété dans une cible. Notez que cela ne change PAS la valeur de la propriété globale avec le même nom mais c'est un moyen de résoudre certains problèmes.
Voir
Par souci de justice, il y a un hack qui permet de modifier les propriétés immuables de fourmi sans libs supplémentaires (depuis Java 6):
<scriptdef name="propertyreset" language="javascript"
description="Allows to assign @{property} new value">
<attribute name="name"/>
<attribute name="value"/>
project.setProperty(attributes.get("name"), attributes.get("value"));
</scriptdef>
Utilisation:
<property name="x" value="10"/>
<propertyreset name="x" value="11"/>
<echo>${x}</echo> <!-- will print 11 -->
Comme d'autres mentionné, cela devrait être utilisé avec précaution après que toutes les approches canoniques se sont révélées inadaptées.
Voici un exemple utilisant local avec la commande basename. Var-unset ne fonctionne pas pour moi.
<for param="db-patches">
<path>
<fileset dir="${undeployed-files}" includes="**/ddl*.zip"/>
</path>
<sequential>
<local name="inpfile" />
<basename property="inpfile" file="@{db-patches}" suffix=".zip" />
<!-- unzip the patch -->
<unzip src="${undeployed-files}/${inpfile}.zip"
dest="${unzipped-patches}/${inpfile}" />
<move file="${undeployed-files}/${inpfile}.zip" tofile="${deployed-files}/${inpfile}.zip"/>
</sequential> </for>
- 1. Écraser la propriété à l'aide de Python
- 2. Comment réinitialiser une propriété dans ANT?
- 3. comment définir la propriété de temps dans ant
- 4. Comment obtenir la cible en tant que propriété dans Ant?
- 5. mauvais répertoire de Ant sur la propriété
- 6. Comment utiliser la propriété Array in ant Task?
- 7. Maven Ant Tâche: Remplacer la propriété dans pom.xml lors de l'exécution de Maven Ant
- 8. Ant build échoue - parce que la fourmi oublie la propriété?
- 9. Comment stocker la valeur de la propriété Ant d'Apache dans le fichier
- 10. Comment puis-je signer un bundle OSGi avec Ant sans écraser le contenu de MANIFEST.MF?
- 11. Autoit IniWrite() écraser la clé?
- 12. Propriété Ant contenant les paramètres Macrodef
- 13. Variable Ant et étendue de propriété
- 14. Les chemins relatifs à la propriété Ant ne fonctionnent pas
- 15. propriété de nom de machine ant
- 16. convertir le chemin ant sans affecter à la propriété immuable
- 17. comment écraser le modèle d'utilisateur
- 18. Copier une liste d'arguments Ant dans une propriété
- 19. Comment puis-je lire la sortie d'une requête sql dans une propriété ant?
- 20. Comment ajouter la propriété système équivalente à Java -D dans Ant
- 21. Comment extraire une sous-chaîne dans Ant
- 22. Table écraser pour s'adapter (css)
- 23. Où puis-je obtenir la tâche Ant Ant Ant?
- 24. Quelle propriété Ant contient le CWD lorsque le script ant est exécuté?
- 25. Comment incrémenter une variable et écraser l'ancienne?
- 26. iPhone ManagedObject delete écraser
- 27. dossier Copie sans écraser
- 28. Impossible d'accéder à la propriété générée par un script dans une cible ANT importée
- 29. PerformanceCounterCategory écraser le CLR
- 30. MKMapView écraser avec EXC_BAD_ACCESS
La tâche var est particulièrement intéressante pour les "variables locales", par ex. dans les boucles (aussi une tâche de l'excellent ant-contrib). Un inconvénient, cependant, est que la tâche var ne supporte pas l'attribut "location". – akr