2013-10-03 1 views
0

Je dois copier tous les fichiers dml.sql dans le fichier DB2_List.txt si le fichier DML.sql est présent. Mais après l'exécution de ce fichier, je reçois une erreur comme ceci: copie ne supporte pas l'élément "if" imbriqué.La copie ne prend pas en charge l'élément "if" imbriqué dans la boucle imbriquée Ant-contrib

Veuillez nous faire savoir si vous avez une meilleure idée sur la boucle imbriquée dans Ant.

<available file="DB/DML.sql" property="db.check.present"/> 
<copy file="DB/DDL.sql" tofile="DB2/DB2_List.txt" > 
<if> 
<equals arg1="${db.check.present}" arg2="true"/> 
<then> 
<filterchain> 
    <concatfilter append="DB/DML.sql" /> 
    <tokenfilter delimoutput="${line.separator}" /> 
</filterchain> 
</then> 
</if> 
</copy> 

Répondre

3

Il est possible d'accomplir ce que vous recherchez, il vous suffit de l'approcher différemment dans Ant. Notez simplement que vous devrez utiliser des cibles distinctes.

<target name="db.check"> 
    <available file="DB/DML.sql" property="db.check.present"/> 
</target> 
<target name="db.copy" depends="db.check" if="db.check.present"> 
    <copy file="DB/DDL.sql" tofile="DB2/DB2_List.txt" > 
    <filterchain> 
     <concatfilter append="DB/DML.sql" /> 
     <tokenfilter delimoutput="${line.separator}" /> 
    </filterchain> 
    </copy> 
</target> 
2

Jetez un oeil à Ant 1.9.1 qui prend en charge les attributs if/unless spéciaux sur les étiquettes. Cette pourrait possible:

<project name="mysterious.moe" basedir="." default="package" 
    xmlns:if="ant:if" 
    xmlns:unless="ant:unless"/> 

    <target name="db.copy"> 
     <available file="DB/DML.sql" property="db.check.present"/> 
     <copy file="DB/DDL.sql" 
      tofile="DB2/DB2_List.txt"> 
      <filterchain if:true="db.ceck.present"> 
       <concatfilter append="DB/DML.sql" /> 
       <tokenfilter delimoutput="${line.separator}" /> 
      </filterchain> 
     </copy> 
    <target> 
... 
</project> 

Sinon, vous devrez utiliser deux copies séparées. Vous ne pouvez pas mettre <if> antcontrib dans les tâches. Seulement autour des tâches:

<available file="DB/DML.sql" property="db.check.present"/> 
<if> 
    <equals arg1="${db.check.present}" arg2="true"/> 
    <then> 
     <copy file="DB/DDL.sql" tofile="DB2/DB2_List.txt" > 
      <filterchain> 
       <concatfilter append="DB/DML.sql" /> 
       <tokenfilter delimoutput="${line.separator}" /> 
      </filterchain> 
     </copy> 
     </then> 
     <else> 
      <copy file="DB/DDL.sql" tofile="DB2/DB2_List.txt" > 
     </else> 
    </if> 
</copy> 
+0

Salut David, S'il y a quatre fichiers db et je dois vérifier la disponibilité de tous les quatre fichiers et en fonction de la disponibilité j'ai besoin de copier le contenu des fichiers disponibles dans un seul fichier texte. Par exemple: Si quatre fichiers db comme dbddl, dbdml, normalddl et normaldml, alors je dois vérifier les scénarios suivants. Dans le premier cas, si tous les quatre fichiers sont disponibles (présents), copiez le contenu des quatre fichiers et collez-les dans un fichier texte. Dans le second cas, s'il n'y a que trois fichiers, copiez le contenu des trois fichiers et collez-le dans un fichier texte. etc. –

+2

Regardez la tâche [''] (http://ant.apache.org/manual/Tasks/macrodef.html). Vous pouvez créer une macro-tâche '' qui vérifiera et, si nécessaire, copiera le fichier db dans votre fichier texte. –

Questions connexes