Foreword to the First Edition

 

Ant started its life on a plane ride, as a quick little hack. Its inventor was Apache member James Duncan Davidson. It joined Apache as a minor adjunct—almost an afterthought, really—to the codebase contributed by Sun that later became the foundation of the Tomcat 3.0 series. The reason it was invented was simple: it was needed to build Tomcat.

Despite these rather inauspicious beginnings, Ant found a good home in Apache, and in a few short years it has become the de facto standard not only for open source Java projects, but also as part of a large number of commercial products. It even has a thriving clone targeting .NET.

In my mind four factors are key to Ant’s success: its extensible architecture, performance, community, and backward compatibility.

The first two—extensibility and performance—derive directly from James’s original efforts. The dynamic XML binding approach described in this book was controversial at the time, but as Stefano Mazzocchi later said, it has proven to be a “viral design pattern”: Ant’s XML binding made it very simple to define new tasks and, therefore, many tasks were written. I played a minor role in this as I (along with Costin Manolache) introduced the notion of nested elements discussed in section 17.6. As each task ran in the same JVM and allowed batch requests, tasks that often took several minutes using Make could complete in seconds using Ant.