Apache Ant, the Java replacement for make, belongs to the rare breed of category killer software
for automating Java software development tasks. As a long time Ant user, I have
written many Ant build scripts, automating my builds and speeding up the overall development
cycle, mostly relying on its excellent online documentation. As a Java developer, I have admired its
simple and intuitive interface and the modular design. So on getting
Ant The Definitive Guide in my hands I wasn't expecting a whole lot new to learn, and
thought of using it only as a reference book for occasional use.
After having the book on my desk for more than a month, and occasionally reaching out to it and
flipping through its pages whenever I would otherwise have consulted the online documentation,
I must say that I was missing out on something very important:
tasks like ftp and war deployment that I was simply not aware of and had never felt the need to
lookup, but could very well use. The other interesting thing I noticed was that my build scripts
became smaller, more modular and easier to read.
Like most books in the The Definitive Guide series, Ant The Definitive Guide assumes
certain level of familiarity with underlying technologies such as Java and XML and focuses on
providing complete, reference like details of Ant features and tasks. These description are
generously supplemented with examples and code fragments.
But so is the the online documentation for Ant! Will someone gain additional insight in
using Ant, or be able to work faster, or make better use of Ant capabilties, if he or
she consulted the book, instead of the online documentation for a particular Ant task. To find
the answer, I randomly picked two tipics -- filesets, an important and oft-used Ant datatype,
and javac, a core Ant task -- and compared their online description with the one in the
book. Here is what I found.
Besides the datatype definition, explanation of various attributes, sub-elements, and the examples,
the book also covers how to specify conditional inclusion or exclusion of certain filename patterns
when a property is set (or unset). Though this can be inferred from online documentation by a
determined user, this particular use is far from obvious. The coverage in the book also talks about
relationship of fileset datatype with the javac task, pointing out that the
fileset attribute dir is equivalent of javac attribute srcdir,
as attribute dir will be confusing in javac: is it referring to source directory
or destination directory. This is the kind of insight that really helps a user.
The treatment of the javac task in the book is not much different from the one in the
online documentation. Both have almost the same material, though the information in the book is
better organized for new users. On the other hand, I found the online documentation to be more
complete, especially with respect to the compiler specific options and behavior idiosyncrasies.
Here is a run down on what the book covers: Chapter 1, Getting Started is a quick primer on
Ant, with sufficient details for a new
user to start using Ant for very simple build tasks. Capter 2, Using Properties and Types
introduces the building block tasks and datatypes, such as property, condition,
fileset, path like structures, selectors and so on, used in other Ant tasks. Chapter 3,
Building Java Code covers the tasks and activities around compiling Java source
files (ie; javac), organizing the build steps in various targets within a single build
scripts and/or across multiple scripts, genrating documentation using javadoc and creating
distribution jars and zip files. Rest of the chapters are devoted to tasks for specific
purposes: such as launching external programs (Chapter 7, Executing External Programs),
copying files and manipulating directories either on the same machine or over the network (Chapter 4,
Deploying Builds), running JUnit tests (Chapter 5, Testing Builds with JUnit) and
so on. There are also separate chapters covering interation of Ant with XML and XDoclet (Chapter 9,
XML and XDoclet) and with Exclipse (Chapter 11, Integrating Ant with Eclipse).
The last chapter, Chapter 12, Extending Ant, talks about extending Ant by doing
things like adding your own tasks, creating custom filters, writing your own build listeners and
loggers etc. This chapter also has a small section on how to embed a script written in one of
the supported scripting languages within an Ant script.
As you can see from this outline, the book covers almost everything that is to know about
Ant and other related software.
So, what is not so good about this book? Well, I didn't find anything wrong with whatever has
been covered. Ofcourse, there are additional things that I would have liked to see in the book:
(a) A good sample Ant script which could be used as the starting point for most small to medium
size projects; (b) A more thorogh explanation of how dependencies among targets determine
the execution sequence and how does this fit-in with explicit invocation of targets; and (c) use
of pictures to illustrate some of the concepts such as life cycle of an Ant task, selection
of files in a fileset, dependency tree of targets.
Overall, I found this book by Steve Holzner to be comprehensive, well organized, easy to read and good value for money.