2009-03-16 26 views
5

La razón es larga y aburrida, pero necesito ejecutar un script Ant para compilar código Java 1.5 desde una aplicación Java 1.4. Quiero evitar este error, sin embargo:Configuración de JAVA_HOME al ejecutar Ant desde Java

BUILD FAILED 

build.xml:16: 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. 
It is currently set to "C:\j2sdk1.4.2_16\jre" 

En mi código, que tengo:

Project p = new Project(); 
p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
p.setProperty("java.home", "C:\Program Files\Java\jdk1.6.0_04"); 
p.fireBuildStarted(); 
p.init(); 
// so on and so forth 

pero lo ignora. También probé p.setUserProperty (String, String), pero eso tampoco funciona. ¿Hay alguna manera de hacerlo sin iniciar un proceso por separado?

+0

FYI: 'java.home' debe ajustarse a' $ JAVA_HOME/jre', no a sí mismo '$ JAVA_HOME'. –

Respuesta

5

¿Tiene la tarea javac en su BuildFile tiene fork="yes"? Si no es así, entonces no importa en qué se establece la propiedad java.home; ant intentará llamar al método javac Main en el mismo proceso java, que a partir de su error es un JRE, no un JDK.

EDITAR Trate de establecer la propiedad executable de la tarea javac para la ruta completa al binario javaccompiler="extJavac" y añadir a la tarea.

+0

Agregar fork = "yes" ayuda, al menos javac se ejecuta, pero sigue siendo la versión incorrecta. –

+0

Estaba buscando algo así como la propiedad "ejecutable" y simplemente no lo vi. Es molesto que tenga que configurarlo para cada tarea javac, pero funciona. Gracias. –

1

¿No deberían duplicarse las barras diagonales inversas?

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

Ellos fueron. Creo que algo salió mal al pegar a StackOverflow. –

0

¿Ha configurado correctamente las variables de entorno JAVA_HOME y ANT_HOME? Si está configurando por código, debería funcionar.

también comprobar si su% JAVA_HOME% directorio bin \% ANT_HOME% \ bin debe estar en la variable de entorno 'camino'.

Su problema parece estar relacionado con el% JAVA_HOME% \ bin no estar presente en el ENVT. ruta variable sin embargo.

0

Otra forma de hacer que esto funcione es agregar 'tools.jar' a su classpath. El compilador javac está contenido dentro de este jar.

java -cp $ JAVA_HOME/lib/tools.jar ...

opción javac
0

está disponible en tools.jar. En eclipse, incluso si su JRE HOME apunta a un jdk, todas las bibliotecas del sistema apuntan a JDK_HOME \ jre \ lib. No hay tools.jar. Puede agregar tools.jar como un archivo jar externo. Esto debería resolver su problema

Cuestiones relacionadas