java ant metrics

Ejecutar ANT mediante programación mediante Java



metrics (1)

Tengo un requisito en el que tengo que extraer métricas de diferentes proyectos Java (configurados en Eclipse) a través de Metrics Plugin . Estoy tratando de automatizar este proceso utilizando scripts de construcción ANT.

He hecho un proyecto de utilidad de Java que:

  1. Crea estos archivos de compilación
  2. Póngalos en los respectivos proyectos de Java configurados en Eclipse
  3. Intenta ejecutarlos.

Mientras build.xml se ejecuta correctamente, cuando intento ejecutarlos programáticamente, aparece el siguiente error:

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)

Supongo que el método parse () no funciona correctamente, pero no entiendo por qué. Ejecutar el build.xml funciona manualmente (lo que significa que el archivo XML se ha creado correctamente). La única modificación que tuve que hacer para que Eclipse ejecutara esta compilación fue ir a Ejecutar> Herramientas externas> Configuración de herramientas externas> JRE y seleccionar "Ejecutar en el mismo JRE que el área de trabajo"

El archivo de compilación es el siguiente:

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

Nota: [projectName] y [ouputFile] se proporcionan actualmente en el momento de su creación, simplemente los omití de esta publicación. FYI, estoy usando Eclipse Indigo. El código donde falla se ve de la siguiente manera:

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


Uno de los problemas es probablemente la forma en que obtiene una instancia ProjectHelper . Tratar:

ProjectHelper helper = ProjectHelper.getProjectHelper();

Tampoco parece tener sentido que llame a Project.init() después de agregar una referencia y establecer una propiedad. Puede ser más addReference crear un nuevo proyecto para cada archivo de compilación y llamar a init antes de llamar a addReference y setProperty .