Wo ist JAVA_HOME unter macOS Mojave (10.14) bis Lion (10.7)?


559

Java ist ein optionales Paket für die neuesten Versionen von macOS.

Nach der Installation scheint die Umgebungsvariable JAVA_HOME jedoch nicht richtig eingestellt zu sein .


1
Mögliches Duplikat von Was soll ich JAVA_HOME auf OSX setzen
mipadi

Auf Mac Sierra habe ich / Library / Java / JavaVirtualMachines mit JDK und Systemeinstellungen> Java. Was unterscheidet diese beiden?
Vikramvi

andere Frage, danke
Olivier Refalo

Unterschätzen Sie nicht die Wahrscheinlichkeit, dass Ihre Java-Installation möglicherweise nicht ordnungsgemäß abgeschlossen wurde. Wenn keiner der folgenden hervorragenden Vorschläge zu funktionieren scheint, versuchen Sie, ihn erneut zu installieren!
MarkHu

Antworten:


1059

Wenn das optionale Java-Paket oder Oracle JDK installiert ist, wird durch Hinzufügen einer der folgenden Zeilen zu Ihrer Datei ~ / .bash_profile die Umgebungsvariable entsprechend festgelegt.

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

Update: -v Flag basierend auf der Antwort von Jilles van Gurp hinzugefügt .


1
Gut zu wissen. Ich muss sagen, ich bin nicht allzu begeistert von der Feature-Liste für Lion. Es scheint nicht viel in der Art von Verbesserungen für meine Verwendung zu geben ...
prodigitalson

1
@Oliver: ewww :-) Das ist wahrscheinlich die am wenigsten nützliche Sache ... Ich habe immer mehrere Fenster geöffnet und auf dem Bildschirm angeordnet, damit ich mehrere Dinge gleichzeitig sehen kann ... normalerweise ein anderes Layout in jedem Raum.
prodigitalson

11
Das hat bei mir nicht funktioniert. /System/Library/Frameworks/JavaVM.framework/Home hat funktioniert.
Chaostheorie

7
Funktioniert auch bei Maverick!
Cbare

3
Exportieren Sie für Java 11 und High Sierra JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z

112

/usr/libexec/java_homeist kein Verzeichnis, sondern eine ausführbare Datei. Es gibt das aktuell konfigurierte JAVA_HOME aus und ändert es nicht wirklich. Dafür ist die Java Preferences-App gedacht, die in meinem Fall kaputt zu sein scheint und die JVM nicht richtig ändert. Es listet zwar die 1.7 JVM auf, aber ich kann alles, was ich will, umschalten / deaktivieren und ziehen und ablegen, ohne die Ausgabe von tatsächlich zu ändern /usr/libexec/java_home.

Selbst nach der Installation von 1.7.0 u6 von Oracle unter Lion und der Festlegung als Standard in den Einstellungen wurde das Apple 1.6-Java nach Hause zurückgegeben. Das einzige Update, das für mich tatsächlich funktioniert, ist das manuelle Einstellen von JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

Zumindest auf diese Weise wird beim Ausführen über die Befehlszeile 1.7 verwendet. /usr/libexec/java_homebesteht immer noch auf 1.6.

Update : Grundlegendes zu Java über die Befehlszeile unter OSX bietet eine bessere Erklärung, wie dies funktioniert.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

ist der Weg, es zu tun. Beachten Sie, dass das Aktualisieren auf 1.8 einwandfrei funktioniert.


blog.hgomez.net/2012/07 ist defekt, aber in der Antwort behoben, die jetzt auf web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/… verweist
Matt C

export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Leo Nguyen

83

Für mich, Mountain Lion 10.8.2, funktioniert die am häufigsten gewählte Lösung nicht. Ich habe jdk 1.7 über Oracle und maven von homebrew installiert.

Meine Lösung stammt aus der Datei hadoop-env.sh von hadoop, die ich auch von Homebrew installiert habe. Ich füge den folgenden Satz in ~ / .bash_profile hinzu und es funktioniert.

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

Diese Lösung funktioniert auch für OS X Yosemite mit Java 1.8, das von Oracle installiert wurde.


1
Es hätte funktioniert, wenn Sie Java 6 von Apple installiert hätten. Der Punkt hier ist, dass Sie Orakel Java 7 verwenden.
Olivier Refalo

2
Dies funktioniert bei mir auf Mavricks sehr gut, aber der Speicherort des Skripts java_home ist anders. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost

1
Ich habe versucht, maven auf Mac Yosemite einzurichten. Auf diese Weise funktioniert JAVA_HOME für mich.
Alocus

Funktioniert für mich auf Sierra 10.12 und Java 8
Kanak Sony

41

Keine der obigen Antworten hat mir geholfen. Ich nehme an, alle Antworten sind für ältereOS X

Führen Sie für OS X Yosemite 10.10 die folgenden Schritte aus

Verwenden Sie Ihren bevorzugten Texteditor, um Folgendes zu öffnen: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Fügen Sie der Datei die folgende Zeile hinzu und speichern Sie sie (: gefolgt von "x" für vim):

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

Geben Sie dann im Terminal die folgenden zwei Befehle ein, um die Ausgabe anzuzeigen:

$ source ~/.bash_profile

$ echo $JAVA_HOME

In der zweiten Zeile aktualisieren Sie den Inhalt der .bash_profileDatei.


Ich glaube, ich habe dein pb bekommen - du verwendest Anführungszeichen anstelle von Rückzitaten 'vs `
Olivier Refalo

Nein, ich verwende die richtigen Anführungszeichen. Stattdessen habe ich versucht, Kopien einzufügen. Es hat nicht funktioniert. Ich habe meine Antwort aktualisiert, weil es bei mir funktioniert hat.
Giri

@OlivierRefalo Ich kann sehen, dass Sie Ihre Antwort mit doppelten Anführungszeichen (") aktualisiert haben. Aber auch ohne Anführungszeichen funktioniert es.
Giri

Vielen Dank . Es funktionierte für mich in Yosemite 10.10
Vijay

2
Dies ist die einzige Lösung, die wirklich funktioniert. Das Hinzufügen eines Pfads durch eine andere Lösung wird vorübergehend hinzugefügt, bis Sie das Terminal beenden und der Pfad verschwindet. Um dauerhaft hinzugefügt zu werden, muss der Pfad in der Datei .bash_profile gespeichert werden. In der Zwischenzeit habe ich der Einfachheit halber eher Nano als Vim verwendet.
Nadeem Jamali

31

Update für Java 9 und einige nette Aliase.

In .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Beachten Sie, dass dies für die neueste Version der Fall ist 9und nicht 1.9.

Aktives Java einstellen:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Einige zusätzliche Alias ​​zum Wechseln zwischen den verschiedenen Versionen:

alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'

Test im Terminal:

% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

BEARBEITEN: Update für Java 10

export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'

BEARBEITEN: Update für Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'

29

Das obige hat bei den EC2-Tools von Amazon nicht funktioniert, da es bin/javadarunter erwartet JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homefunktionierte.


War es ein Löwe? Haben Sie das offizielle Java-Paket von Apple oder Java6 / 7 von Oracle erhalten?
Olivier Refalo

Ich glaube, es war Apples Java-Paket.
Cawflands

1
@ AndrewH ja, ich fand das gleiche wahr. Installierte das Java-Paket von Apple und erkannte den tatsächlichen Bibliothekspfad (z. B. zum Festlegen von -vm in eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub

Danke für die Information. Vielleicht bin ich zu einfach, aber warum macht OS X eine so einfache Sache zu einem kompletten Durcheinander?
Kuberchaun

18

Für OS X können Sie Folgendes tun:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`

Zu beachten ist, dass bei HFS + die Groß- und Kleinschreibung nicht berücksichtigt wird.
Sufinawaz

14

Unter Mac OS X Lion habe ich Folgendes verwendet, um Visualgc für die Ausführung festzulegen:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

1
Ich verstehe Ihren Vorschlag nicht: Wie unterscheidet sich das vom Export JAVA_HOME = /usr/libexec/java_home ? Der Befehl / usr / libexec / java_home gibt /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home zurück
Olivier Refalo

Für visualgc / usr / libexec / java_home ergibt sich: Die Datei java.exe unter: / usr / libexec / java_home befindet sich nicht in einem JDK-Verzeichnis. Bitte legen Sie Ihre Umgebungsvariable JVMSTAT_JAVA_HOME fest und exportieren Sie sie, um auf ein Verzeichnis zu verweisen, das das JDK Sun J2SE 1.5.0 (kein JRE) enthält, und versuchen Sie es erneut.
EGHM

13

Folgendes hat bei mir funktioniert. Ich verwende ZSH unter OSX Yosemite mit installiertem Java 8.

Der folgende Befehl /usr/libexec/java_homegibt den Pfad zu JDK home aus:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

In Ihrem ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"

Wie unterscheidet sich das von der vorgeschlagenen Lösung?
Olivier Refalo

Es unterscheidet sich nicht von der vorgeschlagenen Lösung. Diese Lösung ist spezifisch für Benutzer von ZSH, Java 8 und OSX Yosemite.
Hemanta

Bestätigt, wie ein Zauber mit Java 1.8 auf OSX Yosemite installiert zu arbeiten, Prost Kumpel.
Ashoor

Die allgemeine Lösung funktioniert einwandfrei für Java 8, zsh und Yosemite.
Yaauie

10

Eine bessere (aufrüstbarere) Möglichkeit besteht darin, Folgendes zu verwenden:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

Dies sollte auch mit AWS funktionieren, da es sich binunter Home befindet


1
stimme dieser Aussage nicht zu "mehr aktualisierbar" / usr / libexec / java_home ist eine Exe, die einen Pfad zurückgibt, keinen festen Pfad. Abgesehen davon, welche JVM-Version Sie verwenden, stimmt der obige Pfad nicht überein
Olivier Refalo

10

Neuere Oracle-JVMs wie 1.7.0_21-b12 scheinen hier installiert zu werden:

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


1
In der Tat - und das /usr/libexec/java_homeTool gibt einen Fehler für diese Java-Versionen zurück.
Joe Dyndale

1
Dies ist die einzige Antwort, die für mich funktioniert, nachdem ich v1.7 JRE
maxrossello

2
Dies ist der Pfad, wenn Sie die JRE installieren. Die meisten der bewerteten Antworten und Kommentare beziehen sich auf das JDK. Nicht dasselbe.
8None1

9

für macOS Mojave 10.14.1 und JAVA 11.0.1 habe ich das Profil als festgelegt

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

Geben Sie dies ein, um Folgendes zu bestätigen:

$JAVA_HOME/bin/java -version

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

1
Arbeitet an Catalina. Ty
TuGordoBello

5

Mein Ansatz ist:

.bashrc

export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME

# -- optional
# export PATH=$JAVA_HOME/bin:$PATH

Dies macht es sehr einfach, zwischen J6 und J7 zu wechseln


@AdonisSMU hast du eine Lösung gefunden?
Luccas

3

Ich musste es explizit auf den genauen Pfad auf meinem Macbook Air einstellen.

Schritte folgten:

  1. Versuchen Sie es echo $JAVA_HOME(wenn es eingestellt ist, wird der Pfad angezeigt). Wenn nicht, versuchen Sie es mitsudo find /usr/ -name *jdk
  2. Bearbeiten Sie den Bash p mit - sudo nano ~/.bash_profile
  3. Fügen Sie den genauen Pfad zu JAVA Home hinzu (mit dem Pfad aus Schritt 2 oben). export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Speichern und schließen
  5. Überprüfen Sie JAVA_Home mit - echo $JAVA_HOME

Ich verwende MACOS MOJAVE - 10.14.2 (18C54) auf einem Macbook Air mit JAVA 8


2

Für Mac OS X 10.9 habe ich die neueste Version von JRE von Oracle installiert und dann JAVA_HOME auf /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home zurückgesetzt.

Ich bin mir sicher, dass es einen besseren Weg gibt, habe mich aber zum Laufen gebracht.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home


1
Bei einer Neuinstallation von Mavericks ist dies die einzige Lösung, die für mich funktioniert hat. Musste sqldeveloper auf das hier befindliche jdk-Haus verweisen (wie von diesem Thread vorgeschlagen , damit es funktioniert.
chris

2

OSX Yosemite, ZSH und Java SE Runtime Environment 8 musste ich:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

und in ~ / .zshrc JAVA_HOME in ändern export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"


1

Ich habe das gleiche Problem, nachdem ich mein Mac OS aktualisiert habe und Folgendes für mich funktioniert hat:

  1. cmd> vi ~ / .bash_profile

  2. Fügen Sie die Zeile für JAVA_HOME hinzu / aktualisieren Sie sie: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile oder öffne ein neues Terminal

Ich denke, die JDK-Version kann abweichen, verwenden Sie also einfach die Version, die Sie unter / Library / Java / JavaVirtualMachines / haben


1

Wenn Sie mehrere Versionen von JDK unter Mac OS X (Yosemite) benötigen, kann es hilfreich sein, Skripte für das automatische Wechseln zwischen diesen hinzuzufügen.

Sie bearbeiten Ihr ~ / .bash_profile und fügen Folgendes hinzu:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
setjdk 1.7

Das Skript entfernt zunächst andere JDK-Versionen im PATH, damit sie unsere neue JDK-Version nicht beeinträchtigen. Dann wird / usr / libexec / java_home , ein Befehl, der installierte JDK-Versionen auflistet, geschickt verwendet . Das Argument -v weist java_home an, den Pfad des JDK mit der bereitgestellten Version zurückzugeben, z. B. 1.7. Wir aktualisieren auch den PATH , um auf das bin-Verzeichnis des neu gefundenen JAVA_HOME- Verzeichnisses zu verweisen . Am Ende können wir die Funktion einfach mit ausführen

setjdk 1.7

Hiermit wird die zuletzt installierte JDK-Version des 1.7-Zweigs ausgewählt. Um eine bestimmte Version auszuwählen, können Sie diese einfach ausführen

setjdk 1.7.0_51

stattdessen. Führen Sie / usr / libexec / java_home -V aus , um weitere Informationen zur Auswahl von Versionen zu erhalten.

PS Vergessen Sie nicht, ~ / .bash_profile zu speichern, nachdem Sie es gespeichert haben.


1

Für Java 11 (JDK 11) kann es mit dem folgenden Befehl gefunden werden:

/usr/libexec/java_home -v 11

0

Diese Antwort bezieht sich auf Mountain Lion und nicht auf Lion. Ich musste dies für die AWS Command Line Tools tun. Gemäß den AWS-Dokumenten wird das Ausführen which javazurückgegeben /usr/bin/java.

Also setzte ich JAVA_HOME=/usrmeine ein .bashrc.

Anscheinend /usr/bin/javaist eine symbolische Verbindung, mit /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javader alles funktioniert.

Aktualisieren

Wie im folgenden Kommentar erwähnt, ist dieser JAVA_HOMEWert keine ideale Lösung, wenn die JAVA_HOMEUmgebungsvariable von anderen Dingen als den AWS-Befehlszeilentools verwendet werden soll. Es funktioniert jedoch einwandfrei für die AWS-Befehlszeilentools, wie in den Dokumenten angegeben.


Der Punkt ist, / usr ist kein korrektes JAVA_HOME-Verzeichnis. Es ist in Ordnung, bin / java zu finden. Aber manchmal verwenden Builder (ant, make) JAVA_HOME, um auf den Javac-Compiler in lib / tools.jar zu verweisen. Ihre Lösung schlägt für diese fehl
Olivier Refalo

Ah, danke für die Info. Du hast recht. Aktualisiert die Antwort.
Anjan

0

Für Mac Yosemite

JDK 1.7.0_xx verwendet

$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home

Können Sie bitte weitere Informationen hinzufügen, um diese Antwort nützlich zu machen?
Mika

0

Jeder, der AUSKEY vom australischen Finanzamt (ATO) verwendet, sollte AUSKEY deinstallieren. Dies hat meine JAVA_HOME-Probleme gelöst.

Es ist auch nicht mehr für MAC-Benutzer erforderlich. Yah!


0

Ich verwende Fish Shell in High Sierra 10.13.4 und installiere Java über Brew.

Es wird nicht automatisch so eingerichtet, dass es auf meinem von mir ausgeführten System korrekt eingestellt ist :

set -U JAVA_HOME (/usr/libexec/java_home)

0

Setzen Sie einfach java_home der Version 1.8 jdk in die netbeans.confDatei:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

Kommentarzeile:

netbeans_jdkhome="path/to/jdk"

und setze den Pfad zu deinem 1.8 jdk, in meinem Fall:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Mit diesem Ansatz können Sie mehrere JDK-Versionen auf Mac OS verwenden


0

Für Fish-Terminal-Benutzer auf dem Mac (ich glaube, es ist auch unter Linux verfügbar) sollte dies funktionieren:

set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default

-1

für Mac-Benutzer. Java 8 sollte hinzufügen

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Java 6:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Ref: http://qiita.com/seri_k/items/e978c1339ce51f13e297

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.