开发者

Run ant from Java

开发者 https://www.devze.com 2023-03-21 15:38 出处:网络
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

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.P开发者_运维知识库roject.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());
0

精彩评论

暂无评论...
验证码 换一张
取 消