2
package testrunner.popup.actions;

import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.types.Path;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;

public class AntExecuter {

    public boolean executeAntTask(String buildXmlFileFullPath,String className,String methodName,String mode) {

        System.getProperty("ANT_HOME");

        boolean success = false;

        MessageConsole myConsole = findConsole("Scenario Test");
        MessageConsoleStream out = myConsole.newMessageStream();

        MyLogger myLogger = new MyLogger();
        myLogger.setErrorPrintStream(System.err);
        myLogger.setOutputPrintStream(System.out);
        myLogger.setMessageOutputLevel(Project.MSG_INFO);

        Project project = new Project();
        File buildFile = new File(buildXmlFileFullPath);



        project.setUserProperty("ant.file", buildFile.getAbsolutePath());
        project.addBuildListener(myLogger);


        try {
            project.fireBuildStarted();
            project.init();
            ProjectHelper projectHelper = ProjectHelper.getProjectHelper();
            project.addReference("ant.projectHelper", projectHelper);

            projectHelper.parse(project, buildFile);
            project.setNewProperty("test", className.trim());
            if (!(methodName.equals(""))) {
                project.setNewProperty("method", methodName.trim());
            }
            if ("debug".equals(mode)) {
                project.setNewProperty("debug", "true");
            }   

            project.executeTarget("test");
            project.fireBuildFinished(null);
            project.getBuildListeners();
            out.println("------------- Start Run Test Case -------------");
            out.println( MyLogger.completeMessage);
            out.println("-------------  End Run Test Case  -------------");

            success = true;
        } catch (BuildException buildException) {
            project.fireBuildFinished(buildException);
        }

        return success;
    }

    private MessageConsole findConsole(String name) {
        ConsolePlugin plugin = ConsolePlugin.getDefault();
        IConsoleManager conMan = plugin.getConsoleManager();
        IConsole[] existing = conMan.getConsoles();
        for (int i = 0; i < existing.length; i++)
            if (name.equals(existing[i].getName()))
                return (MessageConsole) existing[i];
        MessageConsole myConsole = new MessageConsole(name, null);
        conMan.addConsoles(new IConsole[] { myConsole });
        return myConsole;
    }

}

上記のコードを使用して、指定された build.xml で ant ターゲットを実行します。このビルド xml は、ant-contrib-1.0b1.jar でいくつかのタスクを使用します。

projectHelper.parse(プロジェクト、ビルドファイル);

この解析メソッドは以下の例外を返します

ビルドに失敗しました /home/sg40304/Projects/modularization/modules/core/system-testing/build.xml:19: この行の実行中に次のエラーが発生しました: /home/sg40304/Projects/modularization/project-properties.xml:183 : この行の実行中に次のエラーが発生しました: /home/sg40304/Projects/modularization/project-deps.xml:17: この行の実行中に次のエラーが発生しました: /home/sg40304/Tools/build-tools/build/deps .xml:18: ${ant.home}/lib に ant-contrib (1.0b2 以降) が見つかりませんでした。ant-contrib はhttp://ant-contrib.sourceforge.net/から入手できます。

この問題を解決するのを手伝ってくれる人はいますか;(

4

1 に答える 1

0

マシンに ant-contrib をインストールします。

指示は以下のリンクに記載されています

http://ant-contrib.sourceforge.net/

于 2012-11-16T08:52:11.247 に答える