2010-09-17 21 views
2

J'écris une macro de vélocité dans laquelle j'ai des tâches ant. Au sein d'une boucle #foreach dans la macro de vitesse, j'ai une tâche pathconvert:Comment réinitialiser une propriété dans ANT?

#foreach(<iterate through something>)   
     <pathconvert property='filename' refid='swf.file'> 
      <mapper> 
      <chainedmapper> 
       <flattenmapper/> 
       <globmapper from='*-d.swf' to='*'/> 
      </chainedmapper> 
      </mapper> 
     </pathconvert> 
#end 

Le problème que j'ai est que la propriété « nom » se défini qu'une seule fois au cours de la première itération, puisque les propriétés en ANT sont immuables . Mais j'ai besoin que le nom de fichier soit défini lors de chaque itération. Y a-t-il un moyen de faire cela?

S'il existait un moyen de réinitialiser la propriété, je pouvais le faire à la fin de chaque itération. Ou y a-t-il une meilleure façon de faire cela? Toute aide serait grandement appréciée!

Merci à l'avance, Anand

Répondre

3

utiliser les nouvelles propriétés portée lexicale dans Ant 1,8:

« portée lexicale propriétés locales, les propriétés à savoir qui ne sont définis à l'intérieur d'une cible, bloc séquentiel ou un environnement similaire. »

Annoucement.

Biens immobiliers à Ant ont été conçus pour être immuable pour, mais ils ont cédé à la demande populaire et nous ont donné des variables. Votre alternative est d'écrire une tâche personnalisée (en Java ou en langage dynamique) mais cela semble être un bon compromis.

0

L'extrait suivant illustre une propriété ant qui, je suppose, n'est pas documentée. Les propriétés sont immuables, mais les références sont mutables. Donc tout type de données qui n'a pas de nom, mais une référence, est mutable. Par exemple un fileset. Mais aujourd'hui j'ai trouvé un moyen d'avoir une sorte de propriété mutable. Connecté avec local tâche ou d'autres astuces, il peut être un moyen d'avoir des variables dans Ant.

<property name="a" value="aaa" id="refa" /> 
<property name="b" refid="refa" /> 
<echo>${b}</echo> 
<property name="c" value="ccc" id="refa" /> 
<property name="d" refid="refa" /> 
<echo>${d}</echo> 

La sortie est la suivante:

aaa 
ccc 

Bien que, dans les deux cas, une référence refa est imprimé.

Voici a post about it. Et another one.