简体   繁体   中英

Run ant from Java

Is there a tutorial on how to run Ant from Java? I got some code from here: Setting JAVA_HOME when running Ant from Java

But haven't been able to make it work. I've been trying to find an example or tutorial on how to actually use it.

Here's what I have so far:

        Project p = new Project();
        p.setUserProperty("ant.file", buildFile.getAbsolutePath());
        p.fireBuildStarted();
        p.init();
        p.executeTarget("default");

But I guess this error:

Exception in thread "main" Target "default" does not exist in the project "null". 
    at org.apache.tools.ant.Project.tsort(Project.java:1912)
    at org.apache.tools.ant.Project.topoSort(Project.java:1820)
    at org.apache.tools.ant.Project.topoSort(Project.java:1783)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at com.arthrocare.vss2svn.VSS2SVN.newProcess(VSS2SVN.java:128)
    at com.arthrocare.vss2svn.VSS2SVN.main(VSS2SVN.java:52)
Java Result: 1

I tried specifying the project with:

p.setUserProperty("ant.project.name", "VSS Project");

But no luck.

The ant file specified is correct as it works perfectly from the command line.

UPDATE

After some more searching I got here: http://onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1

It is a great tutorial.

Here's the code I got a little bit earlier than seeing the code in the answer below:

        Project project = new Project();
        ProjectHelper.configureProject(project, buildFile);
        DefaultLogger consoleLogger = new DefaultLogger();
        consoleLogger.setErrorPrintStream(System.err);
        consoleLogger.setOutputPrintStream(System.out);
        consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
        project.addBuildListener(consoleLogger);
        project.init();
        project.executeTarget(project.getDefaultTarget());

But for some reason the task still fails. I'm using a Visual Source Safe task that needs to read an environment value at runtime but it doesn't see it with this approach. Running the build:xml file manually and with the following code works:

        ProcessBuilder pb = new ProcessBuilder();
        Map env = pb.environment();
        String path = env.get("ANT_HOME");
        System.out.println(path);
        pb.directory(new File(System.getProperty("user.home")));
        pb.command(path + System.getProperty("file.separator")
                + "bin" + System.getProperty("file.separator") + "ant.bat");
        try {
            Process p = pb.start();
        } catch (IOException ex) {
            //
        }

Is there a tutorial on how to run Ant from Java?

Part of my answer to this question might help:

See this article and this article :

 File buildFile = new File("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); p.executeTarget(p.getDefaultTarget());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM