Uruchamianie ANT programowo przez Javę
Mam wymaganie, w którym muszę wyodrębnić metryki z różnych projektów Java (skonfigurowanych w Eclipse) poprzezWtyczka Metrics. Próbuję zautomatyzować ten proces za pomocą skryptów kompilacji ANT.
Zrobiłem projekt narzędzia Java, który:
Utwórz te pliki kompilacjiUmieść je w odpowiednich projektach Java skonfigurowanych w EclipseSpróbuj je wykonać.Podczas gdy plik build.xml działa poprawnie, podczas próby uruchomienia go programowo pojawia się następujący błąd:
<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>
Zakładam, że metoda parse () nie działa poprawnie, ale nie rozumiem dlaczego. Ręczne uruchomienie pliku build.xml (co oznacza, że plik XML został poprawnie utworzony). Jedyną modyfikacją, jakiej musiałem dokonać, aby Eclipse uruchomił tę kompilację, było przejście do opcji Uruchom> Narzędzia zewnętrzne> Konfiguracja narzędzi zewnętrznych> JRE i wybranie „Uruchom w tym samym środowisku JRE co obszar roboczy”
Plik kompilacji jest następujący:
<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>
Uwaga: [projectName] i [ouputFile] są obecnie udostępniane w momencie ich tworzenia, po prostu pominąłem je w tym poście. FYI, używam Eclipse Indigo. Kod, w którym zawodzi, wygląda następująco:
<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>