从文件列表中的目录内部复制文件

时间:2012-03-27 14:02:35

标签: ant

我有一个包含目录列表的filelist。我需要遍历filelist并从每个目录中获取一个文件并将其复制到另一个位置。

我尝试将filelistforeach结合使用,但foreach不支持filelist。在ANT中有没有其他方法可以做到这一点?


我尝试使用for

这在<copy>任务失败,说无法找到目录。它正在查找的目录是${basedir}/bin/,而不是首先在filelist中列出的目录。我假设这是因为它没有正确读取我的filelist。我的foreach版本会出现同样的错误。

    <for 
        list="devBuild"
        delimiter=","
        param="dirName"
        trim="true">
        <sequential>
            <copy
                todir="./apks/"
                failonerror="true"
                verbose="true">
                <fileset dir="@{dirName}/../bin/">
                    <include name="*/*.apk"/>
                </fileset>
            </copy>
        </sequential>
    </for>

部分工作

现在,for循环正在运作......有点儿。我希望它工作的方式如下所示。但是,这无法说明无法找到devBuild引用。但是,filelist早先在另一个target中创建,并使用该引用创建。为什么我不能在不同的目标中使用该引用ID?

    <for
        delimiter=","
        param="dirName"
        trim="true">
        <path>
            <filelist
                refid="devBuild"></filelist>
        </path>
        <sequential>
            <echo>@{dirName}</echo>
            <copy
                todir="./apks/"
                failonerror="true"
                verbose="true">
                <fileset dir="@{dirName}/../bin/">
                    <include name="*/*.apk"/>
                </fileset>
            </copy>
        </sequential>
    </for>

以下方法有效,但我想使用引用ID而不是再次创建filelist

    <for
        delimiter=","
        param="dirName"
        trim="true">
        <path>
            <filelist
                id="devBuild"
                dir="${basedir}"
                files="${build1},${build2},${build3},${build4}"
            />
        </path>
        <sequential>
            <echo>@{dirName}</echo>
            <copy
                todir="./apks/"
                failonerror="true"
                verbose="true">
                <fileset dir="@{dirName}/../bin/">
                    <include name="*/*.apk"/>
                </fileset>
            </copy>
        </sequential>
    </for>

1 个答案:

答案 0 :(得分:1)

我弄明白了这个问题。当我打电话给另一个人target时,我没有为inheritrefs设置标志。这必须是真的,因此其他target将获得引用。