2013-07-10 16 views
10

Nel mio file build.xml, ho queste righe:

<property environment="env"/> 
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" /> 

su una macchina, questo sarebbe stampare

"JAVA_HOME is set to = /usr/jdk1.6" 

Ma in alcuni altri , stampa questo

"JAVA_HOME is set to = ${env.JAVA_HOME}" 

Qualcuno sa che cosa potrebbe causare questo?

Grazie

risposta

9

Il messaggio dice che Ant non è stato in grado di risolvere la proprietà env.JAVA_HOME; questo significa che la variabile di ambiente JAVA_HOME non è stata impostata in quella macchina.

+0

Se JAVA_HOME non è impostato, allora come è stato possibile per il progetto da costruire? (È un progetto Java) –

+0

Ant non richiede di impostare 'JAVA_HOME' (come potresti aver capito perché sei stato in grado di eseguire il tuo file di build anche su macchine in cui' JAVA_HOME' non era impostato) –

+0

Ok questo ha senso ora . Grazie –

6

In genere è possibile trovare sul sistema (se si è Unix) in cui il comando ant reale è in esecuzione tramite which ant o type ant. Se si guarda in quella posizione, di solito si nota che si tratta di un collegamento al comando effettivo nella directory $ANT_HOME.

Dai un'occhiata a questo script. Gran parte di questo è solo cercare di determinare esattamente dove risiedono $ANT_HOME e $JAVA_HOME se questi non sono impostati di default nell'ambiente.

Quello che non si vede nello script shell è ant:

EXPORT JAVA_HOME 

Così, anche se $JAVA_HOME si trova all'interno della sceneggiatura ant, non è mai esportato nell'ambiente (a meno che qualcuno ha modificato il ant script di shell . If an environment variable is not exported, it is unavailable to child processes -- like the java processo child process running your ant`.

Quindi, se siete su una macchina in cui $JAVA_HOME non è impostato prima ant viene eseguito, non sarà disponibile nel vostro script di build.

Tuttavia, sia Ant che Java (poiché Ant è un processo Java) impostano un gran numero di proprietà predefinite che è possibile utilizzare. Quando Ant lo esegue, imposta è own built in properties che include cose come ${ant.home}. E, quando Java viene eseguito, Java imposta anche un elenco completo di Java Properties come ${java.home}.

Quindi, se è davvero necessario sapere dove si trova la directory JAVA_HOME, utilizzare la proprietà ${java.home} e non dipendere dalla variabile di ambiente $JAVA_HOME.

Se vuoi per ottenere una lista di queste proprietà, eseguire il seguente file Ant:

<project> 
    <echoproperties/> 
</project> 
+0

Questo dovrebbe essere contrassegnato come risposta corretta .. in quanto contiene una risposta a ciò che l'OP stava cercando ... – Victor

+2

beh, questo è solo sbagliato. '$ {java.home}' non sta sicuramente dicendo dove JAVA_HOME è, solo la variabile d'ambiente lo dirà. '$ {Java.home} 'dirà dove è stato utilizzato JRE nell'esecuzione, che è una cosa diversa. – eis