从Java运行ant

时间:2011-07-18 13:31:55

标签: java ant

是否有关于如何从Java运行Ant的教程?我从这里得到了一些代码:Setting JAVA_HOME when running Ant from Java

但未能使其发挥作用。我一直试图找到一个关于如何实际使用它的示例或教程。

这是我到目前为止所拥有的:

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

但我想这个错误:

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

我尝试用以下方式指定项目:

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

但没有运气。

指定的ant文件是正确的,因为它在命令行中运行良好。

更新

经过一番搜索后,我来到了这里:http://onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1

这是一个很棒的教程。

这里的代码比我在下面的答案中看到的代码要早一点:

        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());

但由于某种原因,任务仍然失败!我正在使用Visual Source Safe任务,需要在运行时读取环境值,但是这种方法看不到它。手动运行build.xml文件并使用以下代码:

        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) {
            //
        }

1 个答案:

答案 0 :(得分:15)

  

是否有关于如何从Java运行Ant的教程?

我对this question的部分回答可能有所帮助:

  

参见this article   和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());