【问题标题】:Run ant from Java从 Java 运行 ant
【发布时间】:2011-10-07 16:49:56
【问题描述】:

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

但是一直没能成功。我一直在努力寻找如何实际使用它的示例或教程。

这是我目前所拥有的:

项目 p = 新项目(); p.setUserProperty("ant.file", buildFile.getAbsolutePath()); p.fireBuildStarted(); 压住他(); p.executeTarget("默认");

但我猜这个错误:

项目“null”中不存在线程“main”目标“default”中的异常。 在 org.apache.tools.ant.Project.tsort(Project.java:1912) 在 org.apache.tools.ant.Project.topoSort(Project.java:1820) 在 org.apache.tools.ant.Project.topoSort(Project.java:1783) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1368) 在 com.arthrocare.vss2svn.VSS2SVN.newProcess(VSS2SVN.java:128) 在 com.arthrocare.vss2svn.VSS2SVN.main(VSS2SVN.java:52) Java 结果:1

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

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

但没有运气。

指定的 ant 文件是正确的,因为它可以从命令行完美运行。

更新

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

这是一个很棒的教程。

这是我在看到下面答案中的代码之前得到的代码:

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

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

ProcessBuilder pb = new ProcessBuilder(); 映射 env = pb.environment(); 字符串路径 = env.get("ANT_HOME"); System.out.println(路径); pb.directory(new File(System.getProperty("user.home"))); pb.command(path + System.getProperty("file.separator") + "bin" + System.getProperty("file.separator") + "ant.bat"); 尝试 { 进程 p = pb.start(); } 捕捉(IOException ex){ // }

【问题讨论】:

    标签: java ant


    【解决方案1】:

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

    我对@9​​87654321@ 的部分回答可能会有所帮助:

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

    【讨论】:

    • 当我要发布我自己的问题的答案时,我看到你的答案很像我的。现在我从无法执行的任务中得到错误。从命令提示符运行相同的任务效果很好。有什么想法吗?
    • @javydreamercsw,我不确定我是否理解。你说当你从你的java代码执行一个任务时你会出错吗?如果是这样,您可以发布错误吗?您可能需要编辑问题并添加此...
    • 我根据您指向另一个答案的链接添加了日志记录,似乎当我从 Java 运行它时,它看不到它从命令提示符看到的 User ariable(Windows 环境变量)。
    • 我不认为是 build.xml 问题是由于某种原因项目方法没有获得它需要的环境变量。我只是做了同样的事情,但是从 ProcessBuilder 运行并从那里调用 ant 并且它工作正常。我稍后会更新问题。
    • 任何方式查看环境变量?使用 ProcessBuilder,我可以在运行时设置它们,但找不到 ant Project 方法的等价物。
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多