1

私は単純なコピーを使用して、ディレクトリから特定のファイルを取得してきました。

<copy todir="target/failures">
    <fileset dir="target/reports" includes="**/*FAILED.txt"/>
</copy>

代わりに、このファイルを含むフォルダー全体をfailuresフォルダーにコピーしたいと思います。ディレクトリ構造は次のようになります。

target
    reports
        folder1
        folder2
        folder3
    failures

したがって、folder1で障害が見つかった場合は、コンテンツ全体を障害にコピーしてから、残りのフォルダーを続行します。シンプルなはずなのに、これを実現するための組み込みタスクが見つからないようですが、何かアイデアはありますか?

4

1 に答える 1

0

条件を使用して、コピー対象を実行するかどうかを決定します。

<project name="demo" default="copy">

    <fileset id="failures" dir="target/reports" includes="**/*FAILED.txt"/>

    <condition property="failures.found">
        <resourcecount refid="failures" when="greater" count="0" />
    </condition>

    <target name="copy" if="failures.found">
        <copy todir="target/failures" overwrite="true">
            <fileset id="failures" dir="target/reports"/>
        </copy>
    </target>

</project>

アップデート

より有能で柔軟なソリューションは、グルーヴィーなANTタスクを使用します。

<project name="demo" default="copy">

    <path id="build.path">
        <pathelement location="/path/to/task/jars/groovy-all-2.1.1.jar"/>
    </path>

    <target name="copy">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

        <fileset id="failures" dir="target/reports" includes="**/*FAILED.txt"/>

        <groovy>
            project.references.failures.each {
                def failFile   = new File(it.toString())
                def failFolder = new File(failFile.parent)

                ant.copy(todir:"target/failures/${failFolder.name}", overwrite:true) {
                    fileset(dir:failFolder)
                }
            }
        </groovy>
    </target>

</project>
于 2013-03-05T18:56:12.693 に答える