1

差分ビルドをサポートするために、既存のantスクリプトを変更しています。そのために、変更されたファイルのみを検索するために、ファイルセットで変更されたセレクターを使用しました。しかし、問題は、フルビルドを実行しているときに、いくつかのプロパティまたはパラメーターに基づいて変更されたフィルターをバイパスする必要があることです。以下に示すように。とにかくそれをすることはありますか?

<project name="test" default="dt" basedir=".">
    <target name="dt1">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <if>
                    <equals arg1="${ABC}" arg2="true" />
                    <then>
                        <modified update="true" />
                    </then>
                </if>
                <exclude name="*.txt"/>
            </fileset>
        </copy>
    </target>

    <target name="dt">
        <antcall target="dt1">
            <param name="ABC" value="true" />
        </antcall>
    </target>

    <target name="dt2">
        <antcall target="dt1" />    
    </target>
</project>

dttargetを使用して上記のantスクリプトを呼び出す場合modifiedexcludefilesetタスクを検討する必要があります。それが使用して呼び出す場合、私はタスクでdt2のみ考慮する必要があります。excludefileset

filesetネストされたifタスクをサポートしていないため、上記のスクリプトを使用できません。そのため、これを行う別の方法を探しています。これを行うためのいくつかの方法を提案してください。

PS:同じコピータスクで2つのターゲットを作成したくありません。1つはインクルードmodifiedexcludeインを使用しfileset、もう1つは。のみを使用するターゲットexcludeです。

4

2 に答える 2

0

ターゲットの属性を使用して、プロパティを条件として実行を行うことができifます。条件付きパーツをそれ自体のターゲットに移動してから(まだ行っていない場合)、または条件をターゲットに追加する必要があります。unlessifunless

あなたの例からは完全にはわかりませんが、これは、そのうちの1つだけの部分copyを含め、2つのターゲットに含まれることを意味する場合があります。modifiedその場合、各ターゲットを同じプロパティ(一方をif他方として)を条件とすることができますunless

于 2012-10-31T17:31:17.797 に答える
0

要件を達成するために、以下のantスクリプトを使用しました。

<project name="test" default="dt" basedir=".">
    <patternset  id="fs1">
        <exclude name="*.txt"/>
    </patternset >

    <target name="dt1">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <patternset refid="fs1" />
            </fileset>
        </copy>
    </target>

    <target name="dt3">
        <copy todir="ant_temp2">
            <fileset dir="ant_temp1">
                <modified update="true" />
                <patternset refid="fs1" />
            </fileset>
        </copy>
    </target>
</project>

私は再利用可能なパターンセットを作成しました。開発者はそのパターンセットの除外を更新し、通常のビルドとインクリメンタルビルドにそのパターンセットを再利用しています。

于 2012-11-03T05:07:13.337 に答える