Tag Archives: Ant

Enumerating Ant targets programatically

In my previous blog post, I provided some sample code showing how to execute ant targets programatically from Java. This code showed how to execute the default ant target.

Enumerating the targets is a similarly easy process. The code below shows how to iterate through all the ant targets within an ant build file.

Project p = new Project(); 
// Setup Project p 
Hashtable table = p.getTargets(); 
Set set = table.keySet(); 
Iterator iter = set.iterator(); 
while (iter.hasNext()) { 
    System.out.println("Target:"+(String)iter.next()); 
}

Executing Ant tasks programatically

Executing ant tasks programatically via Java is fairly straightforward as shown in the following code sample. To compile and run the following code, ensure you have ant.jar, xercesImpl.jar, xml-apis.jar and ant-launcher.jar (all from the ant lib directory) on your claspath.

/* 
 * AntRunner.java 
 */
  
import java.io.File; 
import org.apache.tools.ant.DefaultLogger; 
import org.apache.tools.ant.Project; 
import org.apache.tools.ant.ProjectHelper; 
import org.apache.tools.ant.taskdefs.Ant; 
  
public class AntRunner { 
  
    public AntRunner() { 
    } 
  
    public static void main(String args[]) throws Exception { 
        File buildFile = new File("/path/to/build.xml"); 
        Project p = new Project(); 
        p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
        p.init(); 
        ProjectHelper helper = ProjectHelper.getProjectHelper(); 
        p.addReference("ant.projectHelper", helper); 
        helper.parse(p, buildFile); 
        DefaultLogger consoleLogger = new DefaultLogger(); 
        consoleLogger.setErrorPrintStream(System.err); 
        consoleLogger.setOutputPrintStream(System.out); 
        consoleLogger.setMessageOutputLevel(Project.MSG_INFO); 
        p.addBuildListener(consoleLogger); 
        p.executeTarget(p.getDefaultTarget()); 
    } 
}