2012-11-18 4 views
0

Il y a le fichier build.bat suivant:Pourquoi Ant ne trouve-t-il pas javac?

echo off 
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25" 
set BUILD_CP="C:\Program Files\Java\jdk1.6.0_25\bin\lib\tools.jar";"C:\Program Files\Java\jdk1.6.0_25\bin";..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 
"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 

Quand je le lance je reçois:

BUILD ECHEC

file:D:/Development/Java/Frameworks/JMeter/TestDemoIbatis/iBATIS_JPetStore-4.0.5/build/build.xml:29: Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK 

Total time: 0 seconds 
Press any key to continue . . . 

Mais mon JAVA_HOME, PATH est bien set:

enter image description here

Mise à jour:
Le script fourmi:

<project name="JPetStore" default="all" basedir="."> 

    <property file="build.properties"/> 

    <path id="classpath"> 
    <pathelement location="${src}/"/> 
    <fileset dir="${lib}" includes="**/*.jar" /> 
    <fileset dir="${devlib}" includes="**/*.jar" /> 
    </path> 

    <target name="clean" > 
    <delete dir="${wars}"/> 
    <delete dir="${webapp}"/> 
    <delete> 
     <fileset dir="${src}" > 
     <include name="**/*.class"/> 
     </fileset> 
    </delete> 
    </target> 

    <target name="prepare" depends="clean"> 
    <mkdir dir="${wars}"/> 
    <mkdir dir="${webapp}"/> 
    <mkdir dir="${webapp}/WEB-INF/classes"/> 
    <mkdir dir="${webapp}/WEB-INF/lib"/> 
    </target> 

    <target name="compile" depends="prepare"> //LINE 29 that fails 
    <javac srcdir="${src}" destdir="${webapp}/WEB-INF/classes" deprecation="off" debug="${debug}"> 
     <classpath refid="classpath"/> 
    </javac> 
    </target> 

    <target name="assemble.view"> 
    <copy todir="${webapp}"> 
     <fileset dir="${web}"> 
     <include name="**/*.jsp"/> 
     <include name="**/*.html"/> 
     </fileset> 

    </copy> 
    </target> 

    <target name="assemble" depends="compile"> 
    <copy todir="${webapp}/WEB-INF/classes"> 
     <fileset dir="${src}" > 
     <exclude name="**/*.java"/> 
     <exclude name="**/*.class"/> 
     </fileset> 
    </copy> 
    <copy todir="${webapp}/WEB-INF/lib"> 
     <fileset dir="${lib}" /> 
    </copy> 
    <copy todir="${webapp}"> 
     <fileset dir="${web}" /> 
    </copy> 
    </target> 

    <target name="war" depends="assemble"> 
    <jar jarfile="${wars}/jpetstore.war"> 
     <fileset dir="${webapp}"> 
     <include name="**/*"/> 
     </fileset> 
    </jar> 
    </target> 

    <target name="all" depends="war" /> 

</project> 

Quel est le problème ici? Je suis en Windows7/64-bit

+0

Mettez votre script ant. –

+0

Utilisez-vous fork = "yes" dans votre cible javac dans le script ant? –

+0

@BhavikAmbani: Mise à jour OP – Cratylus

Répondre

0

Ce tout a fonctionné pour moi:

echo off 

set JAVA_HOME="c:\Program Files\Java\jdk1.6.0_25" 

set BUILD_CP=%JAVA_HOME%\lib\tools.jar;..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 

%JAVA_HOME%\bin\java -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 

Notez que je devais changer le build.xml pour ajouter la source = 1.4 directive:

<javac srcdir="${src}" destdir="${webapp}/WEB-INF/classes" deprecation="off" debug="${debug}" source="1.4"> 
+0

Vous avez raison sur le' source'.J'ai également rencontré quand je lance la construction directement – Cratylus

0

Semble être une sorte de problème avec les espaces dans Program Files.
Après @Chris comment j'ai essayé de construire le fichier moi-même et remarqué que ant -p échoué en raison de "" dans les variables d'environnement.
En faisant JAVA_HOME=C:\Program Files\Java\jdk1.6.0_25 à partir de JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25" j'ai pu exécuter ant directement et construire avec succès.
Je n'ai jamais eu de problèmes avec les espaces dans JAVA_HOME et je l'installe toujours dans Program Files. Je ne suis pas sûr si c'est un problème de Windows 7.
Si quelqu'un pourrait expliquer pourquoi cela se produit, je marquerai la réponse acceptée

+0

Pouvez-vous essayer avec 'C: \ PROGRA ~ 2 \ Java \ jdk1.6.0_25' – user75ponic

+0

En règle générale, je ne sauvegarde jamais java dans un emplacement qui contient des espaces dans le chemin. –

+0

@Chris Lorsque jdk est installé dans Windows, le chemin par défaut est 'C: \ Program Files' et il y a de l'espace dans le dossier' Program Files'. – user75ponic

1

Essayez de mettre des guillemets doubles autour du classpath pour empêcher le classpath se séparer en raison des espaces:

De cette:

"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath %BUILD_CP% org.apache.tools.ant.Main -buildfile build.xml all 

Pour

"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath "%BUILD_CP%" org.apache.tools.ant.Main -buildfile build.xml all 

Edit:

Vous pouvez également essayer de supprimer les guillemets du BUILD_CP.

echo off 
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_25" 
set BUILD_CP=C:\Program Files\Java\jdk1.6.0_25\bin\lib\tools.jar;C:\Program Files\Java\jdk1.6.0_25\bin;..\devlib\ant.jar;..\devlib\optional.jar;..\devlib\junit.jar;..\devlib\xercesImpl.jar;..\devlib\xmlParserAPIs.jar; 
"C:\Program Files\Java\jdk1.6.0_25\bin\java" -classpath "%BUILD_CP%" org.apache.tools.ant.Main -buildfile build.xml all 

set BUILD_CP= 

pause 
+0

Cela ne fonctionnait pas – Cratylus

+0

Je suppose qu'une autre option serait d'essayer d'installer le JDK dans un dossier qui ne contient pas d'espaces? –

+0

Pourquoi je ferais cela? Je n'ai jamais eu de problèmes.Si c'est un problème de 'Windows 7' et il y a une référence le recommandant, je le ferais – Cratylus