Parallel is a container task - it can contain other Ant tasks. Each nested task within the parallel task will be executed in its own thread.

他の Ant タスクを入れ物となるような parallel はコンテナタスクです。 parallel タスクにネストされた個々のタスクは、各々別のスレッドで実行されます。

Parallel tasks have a number of uses in an Ant build file including:

parallel タスクは次のような場合にビルドファイル中で利用できます:

Care must be taken when using multithreading to ensure the tasks within the threads do not interact. For example, two javac compile tasks which write classes into the same destination directory may interact where one tries to read a class for dependency information while the other task is writing the class file. Be sure to avoid these types of interactions within a <parallel> task

マルチスレッドを使う時には、 スレッド中のタスクが相互作用が無いよう確認するよう、注意しなければなりません。 例えば、 同じ出力先ディレクトリに出力する2 つの javac コンパイルタスクは、 一方が依存関係情報のためにクラスを読み込もうとし、 もう一つのタスクが、そのクラスファイルに書き込むというような、 相互作用するかもしれません。 <parallel>タスクにおいて、 この種の相互作用が起きないよう気をつけなければなりません。

The parallel task has no attributes and does not support any nested elements apart from Ant tasks. Any valid Ant task may be embedded within a parallel task, including other parallel tasks.

parallel タスクには属性も無く、 Ant タスク以外のネストする要素もサポートしていません。 どのような有効な Ant タスクでも、 別の parallel タスクも含めて、parallel タスクに入れることができます。

Note that while the tasks within the parallel task are being run, the main thread will be blocked waiting for all the child threads to complete.

parallel タスク中のタスクが実行されているとき、 メインスレッドは 全ての子スレッド完了するまで待ちながらブロックされていることに注意してください。

If any of the tasks within the <parallel> task fails, the remaining tasks in other threads will continue to run until all threads have completed. In this situation, the parallel task will also fail.

もし、<parallel>タスク中のいずれかのタスクが失敗した場合、 別のスレッドの残りのタスクは全てのスレッドが完了するまで、実行を続けます。 このような状況で、parallel タスクもまた失敗します。

The parallel task may be combined with the sequential task to define sequences of tasks to be executed on each thread within the parallel block

parallel ブロック中で、 それぞれのスレッドで実行されるタスクの順序を定義するために、 parallel タスクは sequentialタスクと組み合わせて使うことがあるかもしれません。


  <wlrun ...>
    <sleep seconds="30"/>
    <junit ...>

This example represents a typical pattern for testing a server application. In one thread the server is started (the wlrun task). The other thread consists of a three tasks which are performed in sequence. The sleep task is used to give the server time to come up. Another task which is capable of validating that the server is available could be used in place of the sleep task. The test harness is then run. Once the tests are complete, the server is stopped (using wlstop in this example), allowing both threads to complete. The parallel task will also complete at this time and the build will then continue.

この例では、 サーバーアプリケーションのテストの典型的なパターンを示しています。 一つのスレッドでサーバーを起動(wlrun タスク)し、 もう一つのスレッドには、 順序に従い実行される 3 つのタスクが入っています。 sleep タスクはサーバーが起動される時間を与えるのに使われます。 サーバーが利用可能であるか検証することができる次のタスクは、 sleep タスクに代わって使われます。 そして、一連のテストが行われます。 テストが完了したら、 両方のスレッドが完了できるように、 (この例では wlstop を使って) サーバーは停止されます。 この parallel タスクは、この時完了し、そして、 ビルドが続けられます。

  <javac ...> <!-- サーブレットのコンパイル -->
  <wljspc ...> <!--JSP のプリコンパイル -->

This example shows two independent tasks being run to achieve better resource utilization during the build. In this instance, some servlets are being compiled in one thead and a set of JSPs is being precompiled in another. As noted above, you need to be careful that the two tasks are independent, both in terms of their dependencies and in terms of their potential interactions in Ant's external environment.

この例は、 ビルド中により効率的にリソースを活用するために、 2 つの独立したタスクの実行を示したものです。 このインスタンスにおいて、 幾つかのサーブレットが一つのスレッドでコンパイルされ、 もう一つのスレッドで JSP の集合がプリコンパイルされます。 上で注意した通り、 2 つのタスクは、 依存関係において、そして、 Ant の外部の環境における相互作用の可能性において、 独立であることに注意しなければなりません。

Copyright © 2001 Apache Software Foundation. All rights Reserved.

[訳注:これは漆島賢二が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]