2011-06-20 5 views
2

J'ai un script Ant que je voudrais exécuter en utilisant un bouton que j'ai créé. Le problème est maintenant que je recevrais une erreur en disant:Eclipse impossible de compiler un script ant par programme

BUILD FAILED

X: \ eclipseMT \ Runtime-workspace \ testtest \ diagram1_Sc2_TestScript.xml: 68: Impossible de trouver un compilateur javac; com.sun.tools.javac.Main n'est pas sur le chemin de classe . Peut-être que JAVA_HOME ne pointe pas vers le JDK . Il est actuellement fixé à "C: \ Program Files \ Java \ jdk1.6.0_12 \ jre"

Je suis sûr que mon classpath est correct et je peux exécuter le même script en utilisant Ant interne Eclipse exécuteur.

Ceci est mon script ant:

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

Ceci est mon code bouton:

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; 
    } 

Répondre

0

Un ami me donne une référence à cette question plus tôt: Setting JAVA_HOME when running Ant from Java

Le problème est basiquement avec fourmi, car il a un point java.home à 'jre' au lieu de 'jdk'. Il a été écrasé chaque fois que l'appelait à l'exécution.

La solution est d'ajouter:

fork="yes"

à chaque script de compilation et d'ajouter:

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

au code d'exécution Java.

Espérons que cela aide les autres: D

1

Il se plaint de javac, incapable de trouver javac .. JAVA_HOME (C: \ Program Files \ Java \ jdk1.6.0_12 \ jre) ne pointe que vers "jre" et non vers le compilateur java (javac). Définissez JAVA_HOME sur "C: \ Program Files \ Java \ jdk1.6.0_12 \ bin" (qui contient à la fois javac et jre) et cela devrait fonctionner. :-)

--Nagesh Palathya

+0

Hi Nagesh. Mon JAVA_HOME est déjà défini sur le chemin du JDK. Je l'ai vérifié. Est-il possible que je doive définir mon chemin de projet Java? Merci.. – Iso

Questions connexes