2009-03-16 12 views
5

Il motivo è lungo e noioso, ma ho bisogno di eseguire uno script Ant per compilare il codice Java 1.5 da Java 1.4 app. Continuo a ricevere questo errore, però:Impostazione JAVA_HOME durante l'esecuzione della formica da 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" 

Nel mio codice, ho:

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 

ma l'ignora. Ho anche provato p.setUserProperty (String, String), ma anche questo non ha funzionato. C'è un modo per farlo senza avviare un processo separato?

+0

FYI: 'java.home' deve essere impostato su' $ JAVA_HOME/jre', non su '$ JAVA_HOME' stesso. –

risposta

5

fa il compito javac nel vostro BuildFile hanno fork="yes"? In caso contrario, non importa quale sia la proprietà java.home impostata; ant tenterà di chiamare il metodo javac Main nello stesso processo java, che dal tuo errore è un JRE, non un JDK.

EDIT Prova a impostare la proprietà executable del vostro compito javac al percorso completo del javac binario e aggiungere compiler="extJavac" al compito.

+0

L'aggiunta di fork = "yes" aiuta - almeno javac viene eseguito, ma è ancora la versione sbagliata. –

+0

Stavo cercando qualcosa come la proprietà "eseguibile" e non l'ho visto. È fastidioso doverlo impostare per ogni task javac, ma funziona. Grazie. –

1

qualora l'backslash essere raddoppiato?

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

Erano. Penso che qualcosa sia andato storto quando si incolla su StackOverflow. –

0

Avete impostare le variabili d'ambiente JAVA_HOME e ANT_HOME correttamente? Se si imposta tramite codice, dovrebbe funzionare comunque.

Controlla anche se il vostro% JAVA_HOME directory bin% \% ANT_HOME% \ bin dovrebbe essere nella variabile d'ambiente 'percorso'.

Il tuo problema sembra essere con il% JAVA_HOME% \ bin non essere presenti nel ENVT. percorso variabile però.

0

Un altro modo per fare questo lavoro è quello di aggiungere 'tools.jar' al classpath. Il compilatore javac è contenuto in questo barattolo.

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

0

opzione javac è disponibile in tools.jar. In eclissi, anche se JRE HOME punta a un jdk, tutte le librerie di sistema puntano a JDK_HOME \ jre \ lib. Non c'è tools.jar. È possibile aggiungere tools.jar come file Jar esterno. Questo dovrebbe risolvere il tuo problema

Problemi correlati