Was ist der Grund für die Existenz der Umgebungsvariablen JAVA_HOME?

92

Viele Java-basierte Anwendungen müssen die Umgebungsvariable JAVA_HOME festlegen. Was ist der Zweck dieser Variablen?

user496949
quelle
5
Sie können hier
Sergey Vedernikov
2
Ich finde die Frage hat noch keine Antwort. Um Java selbst auszuführen, ist es nicht erforderlich, diese Variable zu haben, wenn Sie den Ordner mit der Binärdatei im Pfad haben. Alle Antworten weisen auf das Offensichtliche hin: "Wo Java installiert wurde". Aber warum: Was bedeutet das Ausführen von Java-Anwendungen?
Wolf
7
Trotz all dieser Kommentare und Antworten sehe ich keinen tatsächlichen Grund , diese Umgebungsvariable festzulegen. Keine Begründung. Ich bin hierher gekommen, weil ich versucht habe, dies mit wsdl2java einzustellen. Wenn ich dieses Tool nicht verwendet habe, ist die env-Variable nicht erforderlich. Anscheinend verwenden nur einige Tools diese Variable. aber wieso?
Thufir
@Thufir - Ich habe den explizit genannten Grund jedoch nirgends explizit gesehen. - JAVA_HOME ist nur eine Konvention. Es hat keine besondere Bedeutung, außer dass alle zugestimmt haben, es zu verwenden. AFAIK - Die einzige Verwendung, die ich sehe, ist, dass es Tools die Möglichkeit gibt, zwischen der JRE zu unterscheiden, die normalerweise in der PATH-Variablen und dem JDK festgelegt ist. Normalerweise wird JAVE_HOME auf das JDK gesetzt. - Es ist explizit. Es gibt keinen Umgang mit der Reihenfolge von Verzeichnissen wie bei PATH, wo es mehrere Stellen geben könnte, an denen Java Exe gefunden werden kann.
Rohan

Antworten:

22

Umgebungsvariablen sind Zeichenfolgen, die Informationen wie Laufwerk, Pfad oder Dateiname enthalten.

Die Umgebungsvariable JAVA_HOME verweist auf das Verzeichnis, in dem die Java-Laufzeitumgebung (JRE) auf Ihrem Computer installiert ist.

Kamaci
quelle
40
Eine Korrektur: JAVA_HOME sollte auf ein JDK und nicht auf eine JRE verweisen. Vielen Apps ist der Unterschied egal, aber für einige ist er von Bedeutung.
Chris Nava
4
Es gibt auch einen JRE-Ordner im JDK. Mit Hilfe von JAVA_HOME kann eine Anwendung daher sowohl JDK als auch JRE lokalisieren.
Schurkenjunge
@ChrisNava: Es scheint, dass das Verweisen von JAVA_HOME auf eine JRE-Installation in einigen Fällen gültig ist (die meisten Fälle ohne Entwicklung, würde ich vermuten): stackoverflow.com/questions/17601827/… . "Sollte" zu sagen bedeutet also zu viel.
Cic
18

Der Zweck besteht darin, darauf hinzuweisen, wo Java installiert ist. $JAVA_HOME/bin/javasollte die Java-Laufzeit ausführen.

Haakon
quelle
4
Aber es ist dumm, weil Java im Pfad sein sollte und die Binärdatei sich selbst lokalisieren und die anderen Dateien über einen relativen Pfad öffnen kann.
LtWorf
3
Dies ist nützlich, wenn sich Java nicht in $ PATH befindet, z. B. wenn Sie mehrere SDK-Installationen haben.
Haakon
Das erste Argument für die Binärdatei ist der vollständige Name der ausführbaren Datei selbst. Java muss sich nicht im Pfad befinden, um ein eigenes Verzeichnis zu finden.
LtWorf
@Haakon Als jemand, der versucht, mehrere JDKs einzurichten, warum sollten Sie nicht Java auf dem Pfad haben wollen? Wie findet Windows Java überhaupt aus java_home? Ich dachte, der Pfad sei mehr oder weniger definiert als "die Liste der Orte, an denen das Betriebssystem nach ausführbaren Dateien suchen wird".
LastStar007
7

Wenn Sie ein Java-Programm ausführen, müssen Sie zuerst die JVM starten. Dies erfolgt normalerweise durch Ausführen einer ausführbaren Datei. Unter Windows ist dies java.exe . Sie können dies auf viele Arten erreichen, indem Sie beispielsweise nur einen vollständigen Pfad angeben:

C:\somedir\bin\java.exe

oder vielleicht haben Sie es auf Ihrem Pfad.

Sie geben als Befehlszeilenargumente einige Klassendateien oder Jar-Dateien an, die Klassendateien enthalten, die Ihr Programm sind. Aber das ist nicht genug, die java.exe selbst benötigt verschiedene andere Ressourcen, nicht zuletzt alle Java-Bibliotheken. Durch Setzen der Umgebungsvariablen JAVA_HOME legen Sie fest, wo sich die JRE und damit alle diese Laufzeitressourcen befinden. Sie sollten sicherstellen, dass das von Ihnen ausgeführte Java mit der Einstellung von JAVA_HOME übereinstimmt.

Möglicherweise müssen Sie JAVA_HOME\binIhren Pfad auch frühzeitig festlegen, damit beim java.exeErstellen einer Kopie von sich selbst (z. B. zum Kompilieren einer JSP) die richtige Version ausgewählt wird.

djna
quelle
5

JAVA_HOMEist eine Umgebungsvariable .

Es muss auf einem anderen Betriebssystem eingerichtet werden. Überprüfen Sie die folgenden Links.

Siehe auch hier für weitere Informationen.

Sgokhales
quelle
1
Sie stehen in Konflikt environmentmit path, was verschiedene Dinge sind, aber in Windows genauso verwendet werden wie in Linux.
Val
1
@val nur darauf hinweisen, das wurde seitdem in seiner Antwort korrigiert.
Barlop
Nur um der Liste JAVA_HOME in Windows 10
hinzuzufügen
5

Laut @dirai wird hier JAVA_HOMEnicht von Java selbst verwendet, sondern von einigen Tools von Drittanbietern wie zum Beispiel Apache Tomcat. Die meisten Anwendungen funktionieren jedoch ohne diese Variable, einige können jedoch unerwartetes Verhalten zeigen.

Karlsebal
quelle
3

JAVA_HOMEErmöglicht die Ausführung mehrerer Java-Installationen. Selbst wenn Sie das zuerst /usr/lib/jvm/java-1.8.0/bin/java in Ihrem PATH haben, ist es nützlich zu sagen JAVA_HOME=/usr/lib/jvm/java-1.5.0und zu haben, dass der Standard "Java", mit dem Sie Programme ausführen, stattdessen den anderen als eine Frage der Umgebungseinstellung verwendet. Auf diese Weise kann ein Programmierer das benötigte Java verwenden, auch wenn es nicht an einem normalen Systemspeicherort installiert ist, und die umgekehrte Kompatibilität mit dieser alternativen Version testen oder bereitstellen. Und es ist nicht anfällig, von einem anderen installierten Programm im PATH zurückgesetzt zu werden, z. B. einem Hauptversionsupdate für Java.

Nico Kadel-Garcia
quelle