我正在使用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>
以上代码按顺序执行。
答案 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 = true
和threadcount = 5
,其行为与您所描述的完全相同:一次5个文件。