通过Java以编程方式运行ANT

我需要通过Metrics Plugin从不同的Java项目(在Eclipse中配置)中提取指标。 我正在尝试使用ANT构建脚本自动执行此过程。

我做了一个Java实用程序项目,它将:

  1. 创建这些构建文件
  2. 将它们放在Eclipse中配置的各个Java项目中
  3. 尝试执行它们。

虽然build.xml正确运行,但当我尝试以编程方式运行它时,我收到以下错误:

Exception in thread "main" ProjectHelper.parse() must be implemented in a helper plugin org.apache.tools.ant.ProjectHelper at org.apache.tools.ant.ProjectHelper.parse(ProjectHelper.java:277) at com.metrics.generator.MetricsGenerator.runAntScripts(MetricsGenerator.java:69) at com.metrics.generator.MetricsGenerator.doAutomate(MetricsGenerator.java:43) at com.metrics.generator.MetricsGenerator.main(MetricsGenerator.java:30) 

我假设parse()方法不能正常工作,但我不明白为什么。 手动运行build.xml(这意味着正确创建了XML文件)。 我必须为Eclipse运行此构建的唯一修改是转到Run> External Tools> External Tools Configuration> JRE并选择“在与工作区相同的JRE中运行”

构建文件如下:

            

注意:[projectName]和[ouputFile]目前在创建时提供,我只是在这篇文章中省略了它们。 仅供参考,我正在使用Eclipse Indigo。 失败的代码如下所示:

 private void runAntScripts(File[] projectFolders){ BuildLogger logger = new DefaultLogger(); logger.setOutputPrintStream(System.out); logger.setErrorPrintStream(System.out); logger.setMessageOutputLevel(Project.MSG_INFO); Project metricsProject = new Project(); metricsProject.addBuildListener(logger); ProjectHelper helper = new ProjectHelper(); metricsProject.addReference("ant.projectHelper", helper); File buildFile; int totalFolders = projectFolders.length; for(int index = 0; index < totalFolders; index++){ buildFile = new File(projectFolders[index], buildXMLFileName); if(buildFile.isFile()){ helper.parse(metricsProject, buildFile); metricsProject.setProperty("ant.file", buildFile.getAbsolutePath()); metricsProject.init(); metricsProject.setBaseDir(projectFolders[index]); metricsProject.executeTarget("build"); } } } 

其中一个问题可能是你获得ProjectHelper实例的方式。 尝试:

 ProjectHelper helper = ProjectHelper.getProjectHelper(); 

添加引用和设置属性调用Project.init()似乎也没有意义。 为每个构建文件创建一个新项目可能更addReference ,并调用addReferencesetProperty 之前调用init