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.
Dzięki! +1 dla 'TL; DR';)) –
Brak prob. Może zaakceptuj, jeśli uważasz, że to odpowiada na pytanie :) – eis
@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