2013-03-07 9 views
28

Po uruchomieniu mvn -version, zauważyłem java_home punktów do ...jdk\jre (jak pokazano poniżej). Czy to źle? Czy nie powinno wskazywać na ...\jdk.x.y.z (bez \jre)? Jeśli tak, jak mogę go zresetować? (W globalnych %java_home% punktów do katalogu jdk)Java_home w 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" 

Odpowiedz

50

Nie, to nie jest źle. Wskazuje na środowisko JRE używane przez twój JDK, czyli to, co powinno. Jeśli wydrukować JAVA_HOME poza Maven, należy wydrukować poprawnie:

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:\> 

Więc w zasadzie JAVA_HOME musi wskazywać na instalacji JDK (Maven potrzebuje tools.jar) ale Maven faktycznie używa JRE w JDK uruchomić się .

Podczas korzystania mvn -version, Maven używa java właściwość wewnętrzna java.home, jak widać z source code:

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

Ta nieruchomość nie jest to samo, jak ustawienie środowiska JAVA_HOME, więc może cię oszukać. Właściwie jest to właściwość dynamiczna pokazująca, który JRE uruchamia twój kod. Jeśli skompilujesz i uruchomisz testową klasę Test.java, tak samo, możesz zobaczyć, że jeśli twój JAVA_HOME wskazuje na JDK, wartość java.home nie jest równa twojej JAVA_HOME. To jest oczekiwane.

Cytowanie this:

Jaka jest różnica między JAVA_HOME i java.home?

JAVA_HOME to katalog instalacyjny JDK, np. C: \ jdk5. To ma być zestaw jako zmienna środowiskowa i odwoływać się do plików wsadowych systemu Windows lub skryptów uniksowych . Zawsze mam to w moich plikach Panelu sterowania Windows i .tcsh wraz z innymi typowymi zmiennymi środowiskowymi. Niektóre aplikacje Java używają do tego celu nazwy jdk.home, która moim zdaniem jest lepszą nazwą. Ale JAVA_HOME jest używany od początku i jest teraz konwencją.

java.home to katalog instalacyjny JRE, np. C: \ jdk5 \ jre lub C: \ Program Files \ Java \ jre1.5.0_06. W przeciwieństwie do JAVA_HOME, nigdy nie widziałem java.home jako zmiennej środowiskowej. java.home jest wbudowaną właściwością systemową Java , której wartością jest katalog instalacyjny JRE. Ponieważ wszystkie właściwości systemu Java w języku Java są również widoczne jako właściwości kompilacji Ant, możesz użyć $ {java.home} w plikach kompilacji.

Czy jre.home będzie lepszym imieniem? Być może, ale nie sądzę, żeby Sun to zmienił.

Można zobaczyć, że Maven używa JAVA_HOME na mvn.bat:

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

A jeśli chcesz, aby upewnić się, można skomentować out "@echo off" oświadczenie w mvn.bat, więc widać, że jest używany.


TL; DR: Na podstawie podanych informacji konfiguracja jest poprawna, nie trzeba niczego zmieniać.


Edit: tam jest teraz również an issue open about this being confusing. Może to zmieni w przyszłości.

+0

Dzięki! +1 dla 'TL; DR';)) –

+0

Brak prob. Może zaakceptuj, jeśli uważasz, że to odpowiada na pytanie :) – eis

+0

@eis Witam, mam problem http://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-ona-a- jre-rather-than-a-jdk, proszę, pomóż mi to rozgryźć. Dzięki. – Kraken

Powiązane problemy