Eclipse не может скомпилировать скрипт Ant - PullRequest
2 голосов
/ 20 июня 2011

У меня есть скрипт Ant, который я хотел бы выполнить с помощью кнопки, которую я сделал.Проблема в том, что я получаю сообщение об ошибке:

BUILD FAILED

X: \ eclipseMT \ runtime-workspace \ testTest \ diagram1_Sc2_TestScript.xml: 68: Невозможно найтикомпилятор javac;com.sun.tools.javac. Главное не в пути к классам.Возможно, JAVA_HOME не указывает на JDK.В настоящее время он установлен в «C: \ Program Files \ Java \ jdk1.6.0_12 \ jre»

Я почти уверен, что мой путь к классам верен, и я могу выполнить тот же сценарий, используя Eclipse внутреннююИсполнитель муравьев.

Это мой муравейный скрипт:

<property name="src.dir" value="src" />
<property name="test.dir" value="test" />
<property name="test.wstest.dir" value="${test.dir}/wstest" />
<property name="junit.dir" location="X:\eclipseMT\plugins\org.junit_3.8.2.v3_8_2_v20100427-1100"/>
<property name="build.dir" value="build" />
<property name="build.classes.dir" value="${build.dir}/classes" />
<property name="build.test.dir" value="${build.dir}/test"/>
<property name="build.test.classes.dir" value="${build.test.dir}/classes" />
<property name="build.test.data.dir" value="${build.test.dir}/data" />
<property name="build.test.reports.dir" value="${build.test.dir}/reports" />
<property name="dist.dir" value="dist" />
<property name="lib.dir" value="lib" />
<property name="build.debug" value="true" />

<path id="compile.classpath">
    <fileset dir="lib">
        <include name="*.jar"/>
    </fileset>
</path>

<path id="test.compile.classpath">
    <path refid="compile.classpath" />
    <pathelement location="${build.classes.dir}"/>
</path>

<path id="test.classpath">
    <path refid="test.compile.classpath" />
    <pathelement location="${build.test.classes.dir}"/>
</path>

<target name="init" description="create dir desc">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${build.classes.dir}" />
    <mkdir dir="${dist.dir}" />
    <mkdir dir="${lib.dir}" />
    <copy todir="${lib.dir}">
        <fileset dir="${junit.dir}"/>
    </copy>
    <echo>make init dir done</echo>
</target>

<target name="test-init" depends="init" description="create test dir">
    <mkdir dir="${build.test.dir}" />
    <mkdir dir="${build.test.classes.dir}" />
    <mkdir dir="${build.test.data.dir}"/>
    <mkdir dir="${build.test.reports.dir}"/>
<echo>make test init dir done</echo>
</target>

<target name="clean" depends="init, test-init" description="remove previous build">
    <delete verbose="true">
        <fileset dir="${build.classes.dir}" />
        <fileset dir="${build.test.classes.dir}" />
        <fileset dir="${build.test.data.dir}" />
        <fileset dir="${build.test.reports.dir}" />
        <fileset dir="${dist.dir}" />
    </delete>
    <echo>clean build dir done</echo>
</target>

<target name="compile" depends="clean" description="compile java source">
    <javac srcdir="${src.dir}" destdir="${build.classes.dir}" classpath="${build.classes.dir}" debug="on" fork="no" includeAntRuntime="false" />
    <echo>compile source done</echo>
</target>

<target name="test-compile" depends="compile, test-init" description="compile test source">
    <javac srcdir="${test.wstest.dir}" destdir="${build.test.classes.dir}" debug="true" includeAntRuntime="true">
        <classpath refid="test.compile.classpath" />
    </javac>
    <echo>compile test src done</echo>
</target>

<target name="test-reporting" depends="test-compile" description="report even if fail">
    <junit printsummary="false" errorproperty="test.failed" failureproperty="test.failed">
        <classpath>
            <path refid="test.classpath" />
        </classpath>
        <formatter type="brief" usefile="false" /> 
        <formatter type="xml" />
        <batchtest todir="${build.test.data.dir}" unless="testcase">
            <fileset dir="${build.test.classes.dir}" />
            <!--fileset dir="${build.test.classes.dir}" includes="Sc2TestClient*.class" /-->
        </batchtest>
    </junit>

    <junitreport todir="${build.test.data.dir}">
        <fileset dir="${build.test.data.dir}">
            <include name="WSTEST-*.xml" />
        </fileset>
        <report format="frames" todir="${build.test.reports.dir}" />
    </junitreport>
    <fail if="test.failed">
        Test failed. Check ${build.test.reports.dir}
    </fail>
</target>

<target name="default" depends="test-reporting" description="test the whole suite">
    <echo>all test done</echo>
    <tstamp>
        <format property="buildTime" pattern="yyyy-MM-dd' 'HH:mm:ss" />
    </tstamp>
    <echo>build time = ${buildTime}</echo>
</target>

Это мой код кнопки:

Project p = new Project();

    try {
        p.setUserProperty("ant.file", buildFile.getAbsolutePath());     

        DefaultLogger consoleLogger = new DefaultLogger();
        consoleLogger.setErrorPrintStream(System.err);
        consoleLogger.setOutputPrintStream(System.out);
        consoleLogger.setMessageOutputLevel(Project.MSG_INFO);

        p.addBuildListener(consoleLogger);          
        p.fireBuildStarted();
        p.init();

        ProjectHelper helper = ProjectHelper.getProjectHelper();
        p.addReference("ant.projectHelper", helper);
        helper.parse(p, buildFile);
        p.executeTarget(p.getDefaultTarget());
        p.fireBuildFinished(null);
    } catch (Throwable t) {
        t.printStackTrace();
        p.fireBuildFinished(t);
        return false;
    }

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Он жалуется на javac, не может найти javac. Ваш JAVA_HOME (C: \ Program Files \ Java \ jdk1.6.0_12 \ jre) указывает только на «jre», а не на компилятор java (javac). Установите для JAVA_HOME значение «C: \ Program Files \ Java \ jdk1.6.0_12 \ bin» (в котором есть и javac, и jre), и оно должно работать. : -)

- Нагеш Палатья

0 голосов
/ 23 июня 2011

Друг дал мне ссылку на этот предыдущий вопрос: Настройка JAVA_HOME при запуске Ant из Java

Проблема в основном с муравьем, потому что у него есть точка java.home, чтобы 'jre' вместо 'jdk'. Он перезаписывался каждый раз, когда муравья вызывали на выполнение.

Решение добавить:

fork="yes"

к каждому сценарию компиляции и добавьте:

p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_26");

к коду выполнения Java.

Надеюсь, это поможет другим: D

...