In a recent project I faced a build challenge that could not easily be solved by Ant. I needed to execute a series of Ant tasks that had very specific knowledge of my code, but could adapt those tasks as new classes as were added to my project. Specifically I needed to run code, memory, and coverage profiling on all of my JUnit unit test cases, but without knowing the test classes in advance.