2017-08-01 15 views
4

In meinem Java-Code habe ich diese Zeile System.getProperty("java.home"). In einigen Umgebungen gibt dies den gleichen Wert wie JAVA_HOME als Umgebungsvariable zurück.Unterschied zwischen java.home und JAVA_HOME

In einigen Umgebungen gibt System.getProperty("java.home") jedoch einen vollständig anderen Wert als JAVA_HOME zurück.

Also meine Frage ist, was ist der Unterschied zwischen java.home und JAVA_HOME von Java-Perspektive?

Was ich von meiner Forschung weiß, ist JAVA_HOME ist jdk Installationspfad, java.home ist jre Installationspfad, aber dann kann es nicht übereinstimmen, da jre Teil der jdk Installation sein kann.

Antwort

1

Wie Sie erwähnt, JAVA_HOME verweist auf die JDK-Installationspfad durch die Variable Umwelt gegeben (% JAVA_HOME%).

Aber java.home verweist auf die JRE installation path, jetzt gibt es die JRE, die verwendet wurde, die Anwendung auszuführen, denken Sie bitte daran, dass Sie mehrere Versionen von JRE und JDK auf dem gleichen Server/Computer haben, können

Und Sie können eine Anwendung ausführen, die angibt, welche jre oder jdk Sie verwenden möchten.

So zum Beispiel, wenn Sie auf Ihre Umgebung Pfad haben:

%JAVA_HOME% = C:\Program Files\Java\jdk1.6.0_24 

Aber wenn Sie die Anwendung lief eine spezifische jre mit:

"C:\Program Files (x86)\Java\jre1.8.0_73\bin\java" -jar TheJavaFile.jar 

Innerhalb der Anwendung auf Laufzeit, Sie werden auf java.home eine andere Version des JAVA_HOME

bekommen Dies kann erklären, warum in einigen Fällen erhalten Sie verschiedene Versionen für Variable und Systemeigenschaft.

Beachten Sie auch, bitte, dass die Wege recht unterschiedlich sein können, da JRE ein anderes Produkt als JDK ist, dann werden sie an verschiedenen Orten installiert, weil sie

nun unabhängig sind, in Bezug auf was ist der Unterschied von ein JDK vs JRE, erklärt dieses Diagramm es ziemlich klar:

enter image description here

JDK ein Superset von JRE ist, und enthält alles, was in JRE ist, zuzüglich Werkzeuge wie die Compiler und Debugger notwendig für die Entwicklung von Applets und Anwendungen. JRE stellt die Bibliotheken, die Java Virtual Machine (JVM) und andere Komponenten zum Ausführen von Applets und Anwendungen bereit, die in der Programmiersprache Java geschrieben sind.

2

Gemäß Oracle documentationjava.home ist eine Systemeigenschaft, die das Installationsverzeichnis von Java Runtime Environment darstellt. JAVA_HOME ist eine Umgebungsvariable - keine Systemeigenschaft. Überprüfen Sie unter this post, was der Unterschied zwischen Systemeigenschaft und Umgebungsvariable ist. Sie können sich auch auf this post beziehen, um mehr über JAVA_HOME zu erfahren.

+0

Kurz und auf den Punkt. Dies sollte als Antwort markiert werden. – Jay

+0

Es scheint, dass die Frage selbst diese Antwort hat: JAVA_HOME = jdk-Installationspfad und java.home = jre-Installationspfad ... daher scheint die Frage, die hier beantwortet werden muss: Warum jre Pfad nicht in jdk-Pfad passen kann ? in der die Antwort so einfach sein könnte wie "Sie sind verschiedene und unabhängige Produkte, daher teilen sie nicht notwendigerweise den gleichen Weg" –

+0

@MarcoVargas - Sie haben Recht. Aber meine Frage war - jdk = C:/Programme/Java/jdk1.8.0_112 und warum kann dann nicht C:/Programme/Java/jdk1.8.0_112/jre sein? – yogsma