4

我想简化一下:

<target name="build">
   <parallel>
      <antcall target="build-A" />
      <antcall target="build-B" />
      <antcall target="build-C" />
   </parallel>
</target>

<target name="build-A">
   <exec executable="tool.exe" dir="projects/A">
      <arg value="input.xml" />
   </exec>
</target>

wherebuild-Bbuild-C做完全相同的事情(仅分别在 dirsBC中),类似于以下内容:

<dirset id="projects" dir="." >
   <include name="projects/*" />
</dirset>

<apply executable="tool.exe" parallel="true">
   <arg value="input.xml" />
   <dirset refid="projects" />
</apply>

这不起作用,因为apply将执行以下操作之一:

如果parallel设置为true,

tool.exe input.xml projects/A projects/B projects/C

或者如果parallel设置为false,

tool.exe projects/A/input.xml
...waits for tool.exe to complete...
tool.exe projects/B/input.xml
...etc

即使这样也不正确,因为tool.exe期望projects/A目录中运行。

有没有办法将其并行化,使我得到的输出相当于:

cd project/A
tool.exe input.xml

cd ../B
tool.exe input.xml

cd ../C
tool.exe input.xml

但并行?

4

1 回答 1

4

我会使用ant-contrib任务来做到这一点。

<for param="dir" parallel="true">
    <dirset id="projects" dir="." >
        <include name="projects/*" />
    </dirset>
    <sequential>
        <exec executable="tool.exe" dir="@{dir}">
            <arg value="input.xml" />
        </exec>
    </sequential>
</for>
于 2012-12-05T20:20:22.857 回答