0

Metricsプラグインを介してさまざまなJavaプロジェクト(Eclipseで構成されている)からメトリックを抽出する必要があるという要件があります。ANTビルドスクリプトを使用してこのプロセスを自動化しようとしています。

私は次のようなJavaユーティリティプロジェクトを作成しました。

  1. これらのビルドファイルを作成します
  2. それらをEclipseで構成されたそれぞれのJavaプロジェクトに配置します
  3. それらを実行してみてください。

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でこのビルドを実行するために必要な変更は、[実行]>[外部ツール]>[外部ツールの構成]>[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>

注:[projectName]と[ouputFile]は現在、作成時に提供されているため、この投稿では省略しました。参考までに、私はEclipseIndigoを使用しています。失敗するコードは次のようになります。

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

1 に答える 1

4

問題の1つは、おそらくProjectHelperインスタンスの取得方法です。試す:

ProjectHelper helper = ProjectHelper.getProjectHelper();

また、参照を追加してプロパティを設定したProject.init() 後に呼び出していることも意味がないようです。ビルドファイルごとに新しいプロジェクトを作成し、andを呼び出すinit 前に呼び出す方がクリーンな場合がaddReferenceありsetPropertyます。

于 2012-04-05T20:37:50.747 に答える