0

DML.sql ファイルが存在する場合、すべての dml.sql ファイルを DB2_List.txt ファイル内にコピーする必要があります。しかし、このファイルを実行した後、次のようなエラーが発生します。コピーは、ネストされた「if」要素をサポートしていません。

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>
4

2 に答える 2

3

目的を達成することは可能ですが、Ant ではまったく異なる方法でアプローチする必要があります。個別のターゲットを使用する必要があることに注意してください。

<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>
于 2013-10-03T13:20:54.513 に答える
2

タグで特別なif/unless属性をサポートする Ant 1.9.1 を見てください。これは可能かもしれません:

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

そうしないと、2 つの別々のコピーを使用する必要があります。<if>antcontrib をタスク内に配置することはできません。タスク周辺のみ:

<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>
于 2013-10-03T14:52:48.347 に答える