The Parallel Problem

Ant versions since 1.4 include a task that runs other tasks in parallel. Before 1.4, tasks within a target ran sequentially — in most cases, this was okay and to be expected. However, targets that, for example, compile mutually exclusive sets of code or create unrelated directories can benefit from threading these operations so that they are run simultaneously. Users with multiple-CPU systems see performance benefits from parallelizing such tasks. Another benefit of parallelization is for those people who wish to run unit tests against application servers. Their application servers and tests must run simultaneously, which was not easily done in Ant before Version 1.4. Unfortunately, for those who write or have written custom build listeners, parallelization can break their previously working code.

Some build event listeners rely upon certain events occurring in a particular order. For example, if a listener expects to see a taskFinished( ) event after the taskStarted( ) event for the javac task, the listener would fail or act strangely if two javac tasks were run in parallel. The second javac may end before the first. Listener code, while watching for the event saying Ant is finished with the second javac task, may prematurely trigger operations intended for the first javac task, or vice versa. Consequently, the output from, or operations of, the listener would be wrong, possibly leading to further problems. If you’re ever given a buildfile using the parallel ...

Get Ant: The Definitive Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.