Programmgesteuertes Ausführen von ANT über Java

Ich habe eine Anforderung, bei der ich Metriken aus verschiedenen Java-Projekten (in Eclipse konfiguriert) durch extrahieren mussMetrik-Plugin. Ich versuche, diesen Prozess mithilfe von ANT-Erstellungsskripten zu automatisieren.

Ich habe ein Java-Hilfsprojekt erstellt, das Folgendes ermöglicht:

Erstellen Sie diese BuilddateienFügen Sie sie in die entsprechenden in Eclipse konfigurierten Java-Projekte einVersuchen Sie, sie auszuführen.

Während die build.xml ordnungsgemäß ausgeführt wird, wird beim Versuch, sie programmgesteuert auszuführen, die folgende Fehlermeldung angezeigt:

<code>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)
</code>

Ich gehe davon aus, dass die parse () -Methode nicht richtig funktioniert, verstehe aber nicht warum. Das manuelle Ausführen der build.xml funktioniert (was bedeutet, dass die XML-Datei korrekt erstellt wurde). Die einzige Änderung, die ich für Eclipse vornehmen musste, um diesen Build auszuführen, war, zu Ausführen> Externe Tools> Konfiguration externer Tools> JRE zu wechseln und "In derselben JRE wie der Arbeitsbereich ausführen" auszuwählen.

Die Build-Datei sieht wie folgt aus:

<code><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>
</code>

Hinweis: [projectName] und [ouputFile] werden derzeit zum Zeitpunkt ihrer Erstellung bereitgestellt. Ich habe sie nur in diesem Beitrag weggelassen. Zu Ihrer Information, ich verwende Eclipse Indigo. Der Code, in dem es fehlschlägt, sieht wie folgt aus:

<code>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");
        }
    }
}
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage