0

Вопрос по java – Запуск ANT программно через Java

У меня есть требование, при котором я должен извлекать метрики из различных проектов Java (настроенных в Eclipse) черезПлагин метрик, Я пытаюсь автоматизировать этот процесс с помощью сценариев сборки ANT.

Я создал проект утилиты Java, который будет:

  1. Create these build files
  2. Put them in respective Java projects configured in Eclipse
  3. Attempt to execute them.

Когда 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 & gt; Внешние инструменты & gt; Настройка внешних инструментов & gt; JRE и выберите & quot; Запускать в той же JRE, что и рабочая область & quot;

Файл сборки выглядит следующим образом:

<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");
        }
    }
}
  • 4

    Вероятно, одна из проблем связана с тем, как вы получаете

    ProjectHelper пример. Пытаться:

    ProjectHelper helper = ProjectHelper.getProjectHelper();
    

    Также не имеет смысла, что вы звонитеProject.init() after добавление ссылки и установка свойства. Возможно, было бы чище просто создать новый проект для каждого файла сборки и вызватьinit before призваниеaddReference а такжеsetProperty.