【问题标题】:Running ANT Programmatically Through Java通过 Java 以编程方式运行 ANT
【发布时间】:2012-04-19 13:57:47
【问题描述】:

我有一个要求,我必须通过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 运行此构建,我必须进行的唯一修改是转到运行 > 外部工具 > 外部工具配置 > 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>

注意:[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");
        }
    }
}

【问题讨论】:

    标签: java ant metrics


    【解决方案1】:

    其中一个问题可能是您获取ProjectHelper 实例的方式。试试:

    ProjectHelper helper = ProjectHelper.getProjectHelper();
    

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

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多