如何从目录中获取文件并一次并行执行5个文件

时间:2013-03-27 03:54:02

标签: ant ant-contrib

我正在使用ant来获取目录中的所有文件,并且只执行5个并行文件,然后再次执行5个文件。已经执行的文件不应该再次执行。

<target name="ParallelTest" description="Checking the parallelTest">
        <for param="file" >
            <path> 
                <fileset dir="C:/RCBuild3/ofs/bin/prd1">
                        <include name="*.xml"/> 
                </fileset>
            </path>
            <sequential>
                <antcall target="parallelexecutoin">
                    <param name="productfile" value="@{file}"/>
                </antcall>
            </sequential>
        </for> 

    </target>
    <target name="parallelexecutoin">
        <exec dir="C:/RCBuild3/ofs/bin/" executable="cmd">
            <arg value="/c"/>
            <arg value="productupload.bat"/>
            <arg value="-fileName"/>
            <arg value="${productfile}"/>
        </exec>
    </target>    

以上代码按顺序执行。

1 个答案:

答案 0 :(得分:2)

代码优先:

<fileset dir="C:/RCBuild3/ofs/bin/prd1" id="src.files">
    <include name="*.xml"/> 
</fileset>

<pathconvert pathsep="," property="file.list" refid="src.files"/>

<for list="${file.list}" delimiter="," param="file" parallel="true" threadCount="5">
    <sequential>
        <antcall target="parallelexecutoin">
            <param name="productfile" value="@{file}"/>
        </antcall>
    </sequential>
</for>

说明:

首先,为所有需要处理的文件准备fileset

然后,使用pathconvert将文件集转换为属性“file.list”,如:filename1.xml,filename2.xml,filename3.xml

for任务的java代码(隐藏在您的Ant文件后面)将使用逗号将“file.list”拆分为List,并循环遍历List。对于List中的每个元素,循环体(sequential部分)将运行。

parallel告诉for任务运行具有多个线程的循环体,threadcount是可以同时运行的最大线程数。

因此,对于parallel = truethreadcount = 5,其行为与您所描述的完全相同:一次5个文件。