2015-02-24 1 views
2

Je dispose d'un fichier build.properties:Ant-contrib: égaux ne fonctionne pas dans la boucle pour

a=test1 
b= 
c=test2 

et un fichier build.xml:

<property file="build.properties" />  

<for list="${a},${b},${c}" param="params"> 
    <sequential> 
     <echo message="@{params}"></echo> 
     <if> 
      <equals arg1="@{params}" arg2=""/> 
      <then><echo message="empty"/></then> 
      <else><echo message="ok"/></else> 
     </if> 
    </sequential> 
</for> 

J'obtiens:

[echo] test1 
[echo] ok 
[echo] test 2 
[echo] ok 

Mais je veux:

[echo] test1 
[echo] ok 
[echo] empty 
[echo] test 2 
[echo] ok 

Qu'est-ce qui se passe?

Merci pour toute aide.

Répondre

2

La tâche for de Ant-Contrib utilise la classe Java StringTokenizer pour marquer la liste des paramètres. Lors de la segmentation en utilisant cette classe, les jetons vides sont ignorés, ce qui est le cas pour la propriété b dans votre cas.

Une solution consiste à ajouter à la liste des espaces séparés par des virgules, et couper le jeton dans le corps de la boucle:

<for list="${a}, ${b}, ${c}" param="params"> 
    <sequential> 
     <propertyregex override="yes" property="trimmed.param" input="@{params}" 
       regexp=" " replace="" global="true" defaultValue="@{params}" /> 
     <echo message="${trimmed.param}"/> 
     <if> 
      <equals arg1="${trimmed.param}" arg2=""/> 
      <then> 
       <echo message="empty"/> 
      </then> 
      <else> 
       <echo message="ok"/> 
      </else> 
     </if> 
    </sequential> 
</for> 
+0

Merci! Et maintenant, si je veux remplacer par , comment puis-je faire ça? –

+0

@ user1517752 Si vous avez aimé la réponse de manouti, veuillez la marquer Réponse. –

+0

@ user1517752 Je ne comprends pas ce que vous voulez dire par le remplacement? Pourriez-vous mettre à jour la question? – manouti