2013-03-07 15 views
28

Quando ho eseguito mvn -version, ho notato i punti java_home su ...jdk\jre (come illustrato di seguito). È sbagliato? Non dovrebbe puntare a ...\jdk.x.y.z (senza lo \jre)? Se sì, come posso resettarlo? (In globali %java_home% punti alla directory jdk)Java_home in Maven

C:\Users\Owner>mvn -version 
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400) 
Java version: 1.7.0_17 
Java home: C:\Program Files\Java\jdk1.7.0_17\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows" 

risposta

50

No, non è sbagliato. Sta indicando il JRE usato dal tuo JDK, che è quello che dovrebbe. Se si stampa JAVA_HOME fuori Maven, dovrebbe stampare correttamente:

C:\>echo %JAVA_HOME% 
C:\Program Files\Java\jdk1.7.0_07 

C:\>mvn -version 
Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200) 
Maven home: C:\APPS\apache-maven-3.0.4\bin\.. 
Java version: 1.7.0_07, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk1.7.0_07\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 
C:\> 

Quindi, fondamentalmente JAVA_HOME deve puntare a un'installazione JDK (esperto di bisogno del tools.jar), ma in realtà Maven utilizza il JRE all'interno del JDK a correre per sé .

Quando si utilizza mvn -version, Maven utilizza Java proprietà java.home interno, come si può vedere da source code:

version.append("Java home: " + System.getProperty("java.home", "<unknown java home>")).append(LS); 

Questa proprietà non è la stessa cosa di impostazione dell'ambiente JAVA_HOME, quindi potrebbe ingannare. In realtà è una proprietà dinamica che mostra quale JRE sta eseguendo il tuo codice. Se compilate ed eseguite una classe di test Test.java stampando la stessa, potete vedere che se il vostro JAVA_HOME punta a un JDK, il valore di java.home non è uguale a JAVA_HOME. Questo è previsto.

Citando this:

Qual è la differenza tra JAVA_HOME e java.home?

JAVA_HOME è la directory di installazione JDK, ad es. C: \ jdk5. È pensato per essere impostato come variabile di ambiente e referenziato nei file batch di Windows o negli script Unix . Lo ho sempre nel mio pannello di controllo di Windows e nei file .tcsh , insieme ad altre variabili di ambiente comuni. Alcune applicazioni Java usano il nome jdk.home per questo scopo, che credo sia un nome migliore. Ma JAVA_HOME è stato utilizzato fin dall'inizio ed è ora una convenzione.

java.home è la directory di installazione JRE, ad esempio C: \ jdk5 \ jre o C: \ Programmi \ Java \ jre1.5.0_06. A differenza di JAVA_HOME, non ho mai visto java.home come variabile di ambiente. java.home è una proprietà di sistema Java integrata, il cui valore è la directory di installazione di JRE. Poiché tutte le proprietà del sistema Java sono anche esposte come proprietà di costruzione Ant, è possibile utilizzare $ {java.home} nei file di build anche con $ {java.home} .

Sarebbe jre.home un nome migliore? Forse, ma non credo che Sun lo sostituirà .

Si può vedere che Maven utilizza JAVA_HOME sulla mvn.bat:

:endInit 
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 
.. 
%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% .. 

E se si vuole fare in modo, si può commentare "@echo off" dichiarazione mvn.bat, in modo da può vedere che è in uso.


TL; DR: Sulla base delle informazioni che hai dato, la configurazione è corretta, non c'è bisogno di cambiare nulla.


Edit: ora c'è anche an issue open about this being confusing. Forse lo cambieranno in futuro.

+0

Grazie! +1 per 'TL; DR';)) –

+0

Nessun prob. Forse accetta se ritieni che questo abbia risposto alla domanda :) – eis

+0

@eis Ciao, ho un problema http://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-on-a- jre-piuttosto-a-jdk qui, puoi aiutarmi a capirlo. Grazie. – Kraken

Problemi correlati