Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Java编程运行ANT_Java_Ant_Metrics - Fatal编程技术网

通过Java编程运行ANT

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

我有一个需求,我必须从不同的Java项目(在Eclipse中配置)中提取度量。我正在尝试使用ANT构建脚本自动化这个过程

我制作了一个Java实用程序项目,它将:

  • 创建这些生成文件
  • 将它们放在Eclipse中配置的各个Java项目中
  • 尝试执行它们
  • 当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>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
    ,可能会更简洁