如何在Ant中使用并行任务

时间:2017-06-15 12:46:17

标签: java ant parallel-processing

您好我正在处理通过Ant调用逐个运行测试的应用程序。在.bat文件中调用build.xml,在其中调用名为.class test的另一个文件,调用它是否有机会在Ant中进行此并行?

我的ant配置如下所示:

<target name="testexec-run-pattern" description="=> run JUnit tests by Pattern">
    <mkdir dir="${junit.dir}/xml" />
    <input addproperty="input.pattern" />
    <echo message="Executing pattern: ${input.pattern}" />
    <junit showoutput="true" printsummary="on">
        <classpath refid="classpath" />
        <batchtest todir="${junit.dir}/xml">
            <formatter type="xml" extension=".xml" usefile="true" />
            <zipfileset src="${test.jar}">
                <patternset includes="${input.pattern}" />
            </zipfileset>
        </batchtest>
    </junit>
</target>

其中patternset包含要运行的测试。我希望这些测试能够并行运行。我想我需要像foreach这样的东西才能在线程中运行所有测试。

1 个答案:

答案 0 :(得分:2)

在Ant中,可以使用parallel标记并行执行任务。以下是从official Apache Ant site提取的示例:

  

&lt; macrodef name =“dbpurge”&gt;
     &lt; attribute file =“file”/&gt;
    &LT;顺序&GT;
       &lt; java jar =“utils / dbpurge.jar”fork =“true”&gt;
         &lt; arg file =“@ {file} /&gt;
       &LT; / Java和GT;
    &LT; /顺序&GT;
  &LT; / macrodef&GT;

     

&lt; parallel threadCount =“4”&gt;
   &lt; dbpurge file =“db / one”/&gt;
   &lt; dbpurge file =“db / two”/&gt;
   &lt; dbpurge file =“db / three”/&gt;
   &lt; dbpurge file =“db / four”/&gt;
   &lt; dbpurge file =“db / five”/&gt;
   &lt; dbpurge file =“db / six”/&gt;
   &lt; dbpurge file =“db / seven”/&gt;
   &lt; dbpurge file =“db / eight”/&gt;
   &lt;! - 重复约40次 - &gt;
  &LT; /并行&GT;

     

此示例表示使用threadCount和threadsPerProcessor属性的典型需求。旋转所有这40个任务可能会削弱系统的内存和CPU时间。通过限制并发执行的数量,您可以减少对CPU,内存和磁盘IO的争用,因此实际上可以更快地完成。这也是使用threadCount(以及可能的threadsPerProcessor)的一个很好的选择,因为每个任务都是独立的(每个新的JVM都是分叉的)并且不依赖于其他任务。

有关详细信息,请参阅official Apache Ant site