2013-07-03 18 views
12

Quando si cerca di compilare un taglet Javadoc, che richiede $JAVA_HOME/lib/tools.jar, ho scoperto che formica (versione 1.8.4) imposta java.home-$JAVA_HOME/jre piuttosto che solo $JAVA_HOME . Ho verificato questo così:

<echo>${java.home}</echo> 
<echo>${env.JAVA_HOME}</echo> 

[echo] /usr/java/jdk1.7.0_21/jre 
[echo] /usr/java/jdk1.7.0_21 

Secondo ant -diagnostics, non v'è alcuna proprietà come un jdk.home. Così, per usare tools.jar che devo fare:

<classpath location="${java.home}/../lib/tools.jar"/> 

Così, ho due domande:

1) C'è qualcosa di sbagliato con il mio setup di formica che sta causando java.home per puntare alla JRE al posto del JDK?

2) Se questo è il modo in cui deve funzionare la formica, sta usando il .. nel mio percorso di classe nel modo in cui dovrei fare le cose? O dovrei fare ${env.JAVA_HOME}/lib/tools.jar? O qualcos'altro interamente?

+0

ant è uno script di shell. Prova a eseguirlo con shell debug su (+ x). Assicurati che java trovata da formica sia vera java (non tutti i soft link) – Jayan

+0

1) Ho modificato lo script della shell per mettere 'echo $ JAVA_HOME' proprio prima dell'ultima riga, ed era a quel punto invariato. 2) Ho provato a rinominare la directory JDK e inserire un link simbolico al nuovo nome al suo posto. '$ {java.home}' modificato per riflettere la directory rinominata, quindi sta usando la directory giusta. –

+0

Scusa se non l'ho visto fino ad ora! – ingyhere

risposta

7

Ecco le risposte: "C'è qualcosa di sbagliato con la mia messa a punto ..."

  1. No. Ant sta impostando il suo java.home interno in base alle proprietà del sistema JVM. Il codice per HotSpot (interni JVM) lo imposta con "/ jre" aggiunto apposta. In effetti, lo Java(TM) Tutorials for System Properties lo descrive esattamente in questo modo. La variabile "java.home" dalla formica interna in realtà non è la stessa "JAVA_HOME" impostata nel tuo ambiente, diversa ma con nomi simili.

  2. "(Che cos'è) il modo in cui dovrei fare le cose?" Puoi davvero fare ciò che ritieni appropriato, ma ricorda che Ant può e di solito funziona in un processo JVM separato. Presumo che il tuo ambiente di sistema stia probabilmente specificando la JVM che è stata usata per sviluppare l'app, quindi userei semplicemente "$ {env.JAVA_HOME}" per garantire che le aspettative di sviluppo soddisfino le aspettative di costruzione.

Per ulteriori informazioni, si prega di consultare another similar answer here.

Inoltre, si consideri che possono essere raccolte più informazioni dalla form eseguendole con i flag -debug, -diagnostics e/o -verbose.

+0

Sto ricevendo lo stesso problema con i punti JAVA_HOME su JAVA_HOME/jre instate di JAVA_HOME come posso risolvere questo problema? –

+0

Vedere il commento dopo la domanda qui: http://stackoverflow.com/questions/16533256 – ingyhere

2

Aveva lo stesso problema. Ho riscontrato che l'aggiunta di fork="true" al tag javac risolve questo problema. Quindi, fare qualcosa di simile:

<javac target="1.7" source="1.7" fork="true" ...> 

io ringrazio chiunque può spiegare il motivo per cui questo funziona.

+0

L'ambiente probabile set $ JAVA_HOME come percorso JDK. [Ant documentation] (https://ant.apache.org/manual/Tasks/javac.html) afferma (riguardo a 'fork = true')," Predefinito al compilatore della versione di Java che attualmente sta eseguendo Ant. " Pertanto, lo script Ant stesso non imposta il percorso sbagliato per JDK - Dovresti davvero cambiare il comportamento 'javac' di' fork' per farlo. I barattoli si trovano nel JDK dove dovrebbero essere collocati. – ingyhere

+0

Ho cercato una soluzione per 3 ore. Alla fine l'ho trovato. Ho aggiunto (fork = "true") e risolto tutti i miei problemi. Per condividere così tante grazie. – NovaYear

Problemi correlati