2012-04-05 20 views
0

我有一个要求,我必须通过Metrics Plugin从不同的Java项目(在Eclipse中配置)提取指标。我正在尝试使用ANT构建脚本来自动执行此过程。以编程方式通过Java运行ANT

我做了一个Java工具项目,该项目将:

  1. 创建这些构建文件
  2. 把它们在Eclipse
  3. 配置
  4. 尝试执行它们各自的Java项目。

虽然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运行此构建的唯一修改是运行>外部工具>外部工具配置> JRE,然后选择“在与工作空间相同的JRE中运行”

构建文件如下:

<project basedir="." default="init" name="projectName"> 
    <target name="init"> 
     <tstamp/> 
    </target> 

    <target depends="init" name="build"> 
     <eclipse.refreshLocal depth="infinite" resource="projectName"/> 
     <metrics.enable projectName="projectName"/> 
     <eclipse.build BuildType="full" ProjectName="projectName" errorFormat="xml" errorOut="errors.xml" failOnError="true"/> 
     <metrics.export file="outputFile" projectName="projectName"/> 
     </target> 
</project> 

注:[项目]和[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"); 
     } 
    } 
} 

回答

4

的问题之一可能是你得到一个ProjectHelper实例的方式。尝试:

ProjectHelper helper = ProjectHelper.getProjectHelper(); 

它也似乎并没有让你调用Project.init()添加引用,设置属性之后。为每个构建文件创建一个新项目可能会更清洁,并且在调用addReferencesetProperty之前在之前调用init