Was soll ich unter macOS X 10.6 für die Umgebungsvariable JAVA_HOME festlegen?

436

Viele Java-Anwendungen, die Shell-Skripte zum Konfigurieren ihrer Umgebung verwenden, verwenden die JAVA_HOMEUmgebungsvariable, um die richtige Version von Java zu starten, JRE-JARs zu suchen usw.

In macOS X 10.6 scheinen die folgenden Pfade für diese Variable gültig zu sein

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Einige davon sind Symlinks zur aktuellen VM (wie im Bereich Java-Einstellungen definiert).

Aber welches sollte verwendet werden - oder ist es in Ordnung, eines davon zu verwenden?

Robert Christie
quelle

Antworten:

849

Ich habe gerade JAVA_HOMEdie Ausgabe dieses Befehls eingestellt, der Ihnen den in Ihren Java- Einstellungen angegebenen Java-Pfad geben soll. Hier ist ein Ausschnitt aus meiner .bashrcDatei, der diese Variable setzt:

export JAVA_HOME=$(/usr/libexec/java_home)

Ich habe keine Probleme mit dieser Technik gehabt.

Gelegentlich muss ich den Wert von JAVA_HOMEauf eine frühere Version von Java ändern . Für ein Programm, das ich verwalte, ist beispielsweise 32-Bit-Java 5 unter OS X erforderlich. Wenn ich dieses Programm verwende, stelle ich JAVA_HOMEFolgendes ein:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Für diejenigen unter Ihnen, die nicht java_homeauf Ihrem Weg sind, fügen Sie es so hinzu.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

Referenzen :

Mipadi
quelle
20
Berglöwe
57
Noch gültig für Mavericks
Pascal
42
Noch gültig für Yosemite. ;)
Geoffrey Wiseman
42
El capitan. Prüfen!
Gattshjoty
11
Noch gültig für Mojave
Keuha
40

Es ist auch interessant, Ihren PFAD so einzustellen, dass er das JDK widerspiegelt. Nach dem Hinzufügen von JAVA_HOME (dies kann mit dem von 'mipadi' zitierten Beispiel erfolgen):

export JAVA_HOME=$(/usr/libexec/java_home)

Fügen Sie auch in ~ / .profile hinzu:

export PATH=${JAVA_HOME}/bin:$PATH

PS: Für OSX verwende ich im Allgemeinen .profile im HOME-Verzeichnis anstelle von .bashrc

lucasarruda
quelle
Für OSX, auf dem Standard-Bash ausgeführt wird, verwende ich im Allgemeinen die Bash. .bash_profileWarum verwenden Sie diese als die generische .profile?
LeeGee
1
Da .profilees generisch ist, funktioniert es mit shoder bash, während .bash_profilees exklusiv für ist bash. Auch dies isoliert Einstellungen von Apps, die .bash_profilewie verwenden MacPorts. Aber Sie können sicher eines der beiden verwenden. Sehen Sie mehr darüber hier
lucasarruda
1
- Zu Ihrer Information, der von Ihnen bereitgestellte Link bestätigt meinen Verdacht, dass unter Bash (dh standardmäßig) .bash_profileÜberschreibungen verwendet werden .profile.
LeeGee
@LeeGee ja, und das tut es, weil .bash_profilees .profilefür alle shVariationen spezifisch und generisch ist .
Lucasarruda
1
Da OS / X setzt einen Link zu javaIhrer /usr/binsollte es nicht notwendig sein, explizit hinzufügen , $JAVA_HOMEum Ihren Weg.
Zac
20

Ich habe MAC OS X (Sierra) 10.12.2 .

Ich habe JAVA_HOME so eingestellt, dass es mit React Native (für Android-Apps) funktioniert , indem ich die folgenden Schritte befolge .

  • Öffnen Sie das Terminal (Befehl + R, geben Sie Terminal ein und drücken Sie die EINGABETASTE).

  • Fügen Sie die folgenden Zeilen zu ~ / .bash_profile hinzu . export JAVA_HOME=$(/usr/libexec/java_home)

  • Führen Sie nun den folgenden Befehl aus. source ~/.bash_profile

  • Sie können den genauen Wert von JAVA_HOME überprüfen, indem Sie den folgenden Befehl eingeben. echo $JAVA_HOME

Der zurückgegebene Wert (Ausgabe) ist ungefähr wie folgt. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Das ist es.

Hygull
quelle
Das ist hilfreich, danke. Aber ich glaube, Sie haben den letzten Schritt verpasst, bei dem JAVA_HOME auf den zurückgegebenen Wert in .bashrc / .bash_profile / .zshrc / usw. gesetzt wird. Bitte korrigieren Sie mich, wenn ich mich irre.
TheProletariat
2
Es ist nicht notwendig. In meinem Fall $JAVA_HOMEbezieht sich $(/usr/libexec/java_home)und $(/usr/libexec/java_home) wird intern /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homevom System bezeichnet.
Hygull
1
Ich habs. Es war in meinem Fall erforderlich. Vielen Dank.
TheProletariat
13

Ich bin unter Mac OS 10.6.8

Die einfachste Lösung, die für mich funktioniert, ist einfach einzutragen

$ export JAVA_HOME=$(/usr/libexec/java_home)

Um zu testen, ob es funktioniert, geben Sie ein

$ echo $JAVA_HOME

es zeigt

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Sie können auch testen

$ which java
Rae
quelle
9

Ich neige dazu zu benutzen /Library/Java/Home. Die Funktionsweise des Einstellungsbereichs sollte mit Ihrer bevorzugten Version auf dem neuesten Stand sein.

Clint
quelle
/Behälter . und überprüfen Sie, ob es auf / Library / java und nicht auf / System / Library / .. verweist, da dieses möglicherweise veraltet ist.
JRun
1
Dies ist nicht mehr korrekt. Verwenden Sie unter OS X 10.5 und höher / usr / libexec / java_home, um den Pfad zu finden.
Kristopher Johnson
8

Das oben genannte funktioniert in YOSEMITE für GRAFISCHE ANWENDUNGEN nicht mehr! Wie Eclipse oder alles, was mit Spotlight begann. (.bash_profile, launchd.conf funktioniert nur für Terminalsitzungen.) Öffnen Sie vor dem Starten von Eclipse einfach ein Terminalfenster und geben Sie den folgenden Befehl aus:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(Mit Ihrem Installationspfad! Funktioniert möglicherweise auch mit $ (/ usr / libexec / java_home) anstelle des vollständigen Pfads.)

Den gesamten ausgezeichneten Artikel über die permanente Lösung finden Sie hier: Das Festlegen von Umgebungsvariablen über launchd.conf funktioniert nicht mehr unter OS X Yosemite / El Capitan / macOS Sierra?

Pálossy László
quelle
2

Ich habe festgestellt, dass dieser Stapel hilft. Ich hatte das gleiche Problem und konnte Folgendes beheben:

Mein Java-Pfad war hier:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

und wurde benötigt, um in meine .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Hoffe Hilfe

Shirow
quelle
2

Überspringen des Terminal-Setups, da Sie Anwendungen erwähnt haben, Einrichtung einer permanenten Systemumgebungsvariablen (funktioniert für macOS Sierra; sollte auch für El Capitan funktionieren):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(Dadurch wird JAVA_HOME auf das neueste 1.8 JDK gesetzt. Möglicherweise haben Sie mehrere Updates durchgeführt, z. B. javac 1.8.0_101, javac 1.8.0_131.)
Ändern Sie 1.8 natürlich in 1.7 oder 1.6 (wirklich?), um Ihren Anforderungen und Ihrem System zu entsprechen

ericn
quelle
1

Wie andere Antworten vermerken, ist die richtige Methode zum Auffinden des Java-Ausgangsverzeichnisses die Verwendung /usr/libexec/java_home.

Die offizielle Dokumentation hierzu finden Sie in den technischen Fragen und Antworten von Apple. QA1170: Wichtige Java-Verzeichnisse unter OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
quelle
Dies ist ein Duplikat!
Franklin Yu
Ich denke, die Aufnahme des Links zur offiziellen Apple-Dokumentation macht ihn nicht überflüssig. Wenn dies jedoch der Fall ist, besteht die richtige Aktion darin, es als Duplikat zu kennzeichnen und keinen Kommentar abzugeben.
Kristopher Johnson
Ich habe einen Kommentar abgegeben, weil ich eine Antwort nicht als Duplikat markieren kann . Mit dem Stapelüberlauf kann der Benutzer eine Frage (leider) nur als Duplikat markieren . Der Link ist hilfreich, aber ich denke, ein Kommentar zur aktuellen Antwort (oder bearbeiten Sie ihn einfach mit dem Link, da Sie bereits über die entsprechenden Funktionen verfügen) wäre besser, da alle nützlichen Informationen in einer einzigen Antwort zusammengefasst sind. Ich glaube, es gab irgendwo eine Richtlinie, nach der Stack Overflow es vorzieht, aktuelle Antworten zu korrigieren, anstatt eine neue zu schreiben.
Franklin Yu
1

Für mich scheint Maven von der .mavenrcDatei abzuarbeiten :

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Ich bin mir sicher, dass ich es auch bei SO aufgegriffen habe, kann mich aber nicht erinnern, wo.

maksimov
quelle
1

Erstelle Datei ~/.mavenrc

Fügen Sie dies dann in die Datei ein

export JAVA_HOME=$(/usr/libexec/java_home)

Prüfung

mvn -v

KhaledMohamedP
quelle
Ich mag diesen Ansatz, weil ich damit die Java-Version in der .mavenrc-Datei sehr einfach ändern kann.
Spindizzy
1

Es wird empfohlen, die Standard-Terminal-Shell zu überprüfen, bevor die Umgebungsvariable JAVA_HOME über die folgenden Befehle festgelegt wird:

$ echo $SHELL
/bin/bash

Wenn Ihr Standardterminal / bin / bash (Bash) ist, sollten Sie die @ hygull- Methode verwenden

Wenn Ihr Standardterminal / bin / zsh (Z-Shell) ist, sollten Sie diese Umgebungsvariablen in der Datei ~ / .zshenv mit folgendem Inhalt festlegen :

export JAVA_HOME="$(/usr/libexec/java_home)"

In ähnlicher Weise sollten Sie für jeden anderen nicht oben genannten Terminaltyp die Umgebungsvariable in der jeweiligen Terminal-Env-Datei festlegen.

Diese Methode wurde unter macOS Mojave Version 10.14.6 getestet .

Jerry Chong
quelle
-1

Verwenden Sie für Benutzer von Fish Shell Folgendes: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
quelle