通过Java编程运行ANT
我有一个需求,我必须从不同的Java项目(在Eclipse中配置)中提取度量。我正在尝试使用ANT构建脚本自动化这个过程 我制作了一个Java实用程序项目,它将:通过Java编程运行ANT,java,ant,metrics,Java,Ant,Metrics,我有一个需求,我必须从不同的Java项目(在Eclipse中配置)中提取度量。我正在尝试使用ANT构建脚本自动化这个过程 我制作了一个Java实用程序项目,它将: 创建这些生成文件 将它们放在Eclipse中配置的各个Java项目中 尝试执行它们 当build.xml正确运行时,当我尝试以编程方式运行它们时,会出现以下错误: Exception in thread "main" ProjectHelper.parse() must be implemented in a helper plugi
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>externaltools>externaltoolsconfiguration>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>
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");
}
}
}
注意:[projectName]和[ouputFile]目前是在创建时提供的,我只是在本文中省略了它们。仅供参考,我正在使用Eclipse Indigo。
失败的代码如下所示:
<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>
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");
}
}
}
private void runAntScripts(文件[]项目文件夹){
BuildLogger=新的DefaultLogger();
logger.setOutputPrintStream(System.out);
logger.setErrorPrintStream(系统输出);
logger.setMessageOutputLevel(Project.MSG_INFO);
项目度量项目=新项目();
metricsProject.addBuildListener(记录器);
ProjectHelper=新的ProjectHelper();
metricsProject.addReference(“ant.projectHelper”,helper);
文件构建文件;
int totalFolders=projectFolders.length;
对于(int index=0;index
问题之一可能是获取ProjectHelper
实例的方式。尝试:
ProjectHelper helper = ProjectHelper.getProjectHelper();
在添加引用和设置属性之后调用
Project.init()
,似乎也没有什么意义。只需为每个构建文件创建一个新项目,并在调用addReference
和setProperty之前调用init
,可能会更简洁。问题之一可能是您获取ProjectHelper
实例的方式。尝试:
ProjectHelper helper = ProjectHelper.getProjectHelper();
在添加引用和设置属性之后调用Project.init()
,似乎也没有什么意义。只需为每个构建文件创建一个新项目,并在调用addReference
和setProperty
之前调用init
,可能会更简洁