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 に答える