Chapter 0. Introduction to the Second Edition
1.2. What makes Ant so special?
Ant makes it easy to bring developers into a project
It is well-known and widely supported
It integrates testing into the build processes
2.1. Defining our first project
2.2. Step zero: creating the project directory
2.3. Step one: verifying the tools are in place
2.4. Step two: writing your first Ant build file
2.5. Step three: running your first build
2.6. Step four: imposing structure
2.6.1. Laying out the source directories
2.6.2. Laying out the build directories
2.6.3. Laying out the distribution directories
2.6.4. Creating the build file
2.7. Step five: running our program
2.7.1. Why execute from inside Ant?
2.8.1. Specifying which build file to run
2.9. Examining the final build file
Chapter 3. Understanding Ant datatypes and properties
3.2. Introducing datatypes and properties with <javac>
3.7.1. Setting properties with the <property> task
3.7.2. Checking for the availability of files: <available>
3.7.3. Testing conditions with <condition>
3.8. Controlling Ant with properties
3.8.1. Conditional target execution
3.10. Managing library dependencies
4.1. What is testing, and why do it?
To avoid proofs-of-correctness
4.2. Introducing our application
Why use JUnit 3.8.2 and not JUnit 4.0?
4.5.1. Fitting JUnit into the build process
4.6. Generating HTML test reports
4.7. Advanced <junit> techniques
Passing information to test cases
5.3. Modifying files as you go
5.4.1. Adding data files to the classpath
5.5.3. Adding extra metadata to the JAR
5.7.1. Creating a binary Zip distribution
5.9.1. A formal definition of a resource
6.1. Running programs under Ant—an introduction
6.1.1. Introducing the <java> task
6.1.4. Defining system properties
6.2.1. Running our diary as a native program
6.2.2. Executing shell commands
6.3. Advanced <java> and <exec>
6.3.1. Setting environment variables
6.3.3. Running a program in the background
6.4. Bulk operations with <apply>
Chapter 7. Distributing our application
7.1. Preparing for distribution
Getting Ant’s distribution tasks ready
7.2. FTP-based distribution of a packaged application
7.2.2. Uploading to a Windows FTP server
7.3. Email-based distribution of a packaged application
7.4. Secure distribution with SSH and SCP
7.4.1. Uploading files with SCP
7.4.2. Downloading files with <scp>
7.5.1. How to probe for a server or web page
7.6. Distribution over multiple channels
Chapter 8. Putting it all together
8.1. How to write good build files
8.2. Building the diary library
8.2.2. The public entry points
Chapter 9. Beyond Ant’s core tasks
9.1. The many different categories of Ant tasks
9.2. Installing optional tasks
9.4. Software configuration management under Ant
9.5.1. Defining tasks with <taskdef>
9.5.2. Declaring tasks defined in property files
9.7. Code auditing with Checkstyle
Chapter 10. Working with big projects
Building a large project is hard
10.1. Master builds: managing large projects
10.2. Controlling child project builds
10.4. Inheriting build files through <import>
10.4.2. Importing build files with <import>
10.4.3. How Ant overrides targets
10.5.1. Extending an existing build file
10.7. Writing macros with <macrodef>
Chapter 11. Managing dependencies
How to add libraries to an Ant classpath
11.3. Resolving, reporting, and retrieving
11.4. Working across projects with Ivy
11.4.1. Sharing artifacts between projects
11.5.1. Managing file versions through Ivy variables
11.5.2. Finding artifacts on the central repository
Chapter 12. Developing for the Web
12.1. Developing a web application
12.1.1. Writing a feed servlet
12.4. Post-deployment activities
12.5. Testing web applications with HttpUnit
12.5.1. Writing HttpUnit tests
13.1. Background: XML-processing libraries
13.3.1. Validating documents using DTD files
13.5. Transforming XML with XSLT
13.5.1. Defining the structure of the constants file
13.5.2. Creating the constants file
14.1. Evolving the diary application
14.2. Making an Enterprise application
14.4. Extending the web application
14.5. Building the Enterprise application
14.6. Deploying to the application server
14.7. Server-side testing with Apache Cactus
Chapter 15. Continuous integration
15.1. Introducing continuous integration
15.3. Moving to continuous integration
16.1. How to survive deployment
16.4. Deploying with SmartFrog
16.4.1. SmartFrog: a new way of thinking about deployment
16.5. Using SmartFrog with Ant
16.5.1. Deploying with SmartFrog
17.1. What exactly is an Ant task?
17.2. Introducing Ant’s Java API
17.3. A useful task: <filesize>
17.4. Testing tasks with AntUnit
17.6. Supporting nested elements
17.8. Delegating to other tasks
17.10. Making an Antlib library
Chapter 18. Extending Ant further
Implicit objects provided to <script>
18.3. Writing a custom resource
18.5. Developing a custom mapper
18.6. Implementing a custom filter
18.7. Handling Ant’s input and output
18.7.1. Writing a custom listener
18.7.2. Writing a custom logger
Problem: Java not installed/configured
Problem: JDK not installed/configured
Problem: Another version of Ant is on the path
Problem: Ant fails with an error about a missing task or library
Problem: The ANT_HOME directory points to the wrong place
Problem: Incompatible Java libraries on the classpath
Problem: Java extension libraries conflicting with Ant
Problem: Sealing violation when running Ant
Problem: Calling Ant generates a Java usage message
Eclipse http://www.eclipse.org/
Sun NetBeans http://www.netbeans.org/
IntelliJ IDEA http://intellij.com/