Gdzie jest JAVA_HOME na macOS Mojave (10.14) i Lion (10.7)?


559

Java jest opcjonalnym pakietem w najnowszych wersjach systemu macOS.

Jednak po zainstalowaniu wygląda na to, że zmienna środowiskowa JAVA_HOME nie jest ustawiona poprawnie .



Na Mac Sierra mam / Library / Java / JavaVirtualMachines, który ma jdk i Preferencje systemowe> Java. Czym różnią się te 2?
vikramvi

inne pytanie, dziękuję
Olivier Refalo

Nie lekceważ szans, że instalacja Java może nie zostać poprawnie ukończona. Jeśli żadna z poniższych doskonałych sugestii nie wydaje się działać, spróbuj [ponownie] zainstalować!
MarkHu,

Odpowiedzi:


1059

Po zainstalowaniu opcjonalnego pakietu Java lub Oracle JDK dodanie jednego z poniższych wierszy do pliku ~ / .bash_profile spowoduje odpowiednie ustawienie zmiennej środowiskowej.

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)"

Aktualizacja: dodano flagę -v na podstawie odpowiedzi Jillesa van Gurpa .


1
Dobrze wiedzieć. Muszę powiedzieć, że nie jestem zbyt zachwycony listą funkcji dla Lion. Wydaje się, że nie ma zbyt wiele sposobów na ulepszenia dla mojego użycia ...
prodigitalson

1
@Oliver: ewww :-) To prawdopodobnie najmniej przydatna rzecz ... zawsze mam wiele okien otwartych i rozmieszczonych na ekranie, dzięki czemu mogę zobaczyć wiele rzeczy na raz ... zwykle inny układ na każdej przestrzeni.
prodigitalson

11
to nie działało dla mnie. /System/Library/Frameworks/JavaVM.framework/Home działał.
chaostheory,

7
Działa również na Maverick!
cbare

3
W przypadku Java 11 i High Sierra wyeksportuj JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z

112

/usr/libexec/java_homenie jest katalogiem, ale plikiem wykonywalnym. Wyprowadza obecnie skonfigurowany JAVA_HOME i tak naprawdę go nie zmienia. Do tego służy aplikacja Java Preferences, która w moim przypadku wydaje się zepsuta i właściwie nie zmienia poprawnie JVM. Wyświetla listę JVM 1.7, ale mogę przełączać / rozłączać i przeciągać i upuszczać tam wszystko, czego chcę, bez zmiany wyjścia /usr/libexec/java_home.

Nawet po zainstalowaniu 1.7.0 u6 z Oracle na Lionie i ustawieniu go jako domyślnego w preferencjach, nadal zwrócił Apple 1.6 Java Home. Jedyną poprawką, która faktycznie dla mnie działa, jest ręczne ustawienie JAVA_HOME:

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

Przynajmniej w ten sposób, gdy zostanie uruchomiony z wiersza poleceń, użyje 1.7. /usr/libexec/java_homenadal nalega na 1.6.

Aktualizacja : Zrozumienie Java z wiersza poleceń w OSX ma lepsze wyjaśnienie, jak to działa.

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

jest na to sposób. Uwaga: aktualizacja do wersji 1.8 działa dobrze.


blog.hgomez.net/2012/07 jest zepsuty, ale został naprawiony w odpowiedzi, która teraz prowadzi do web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/...
Matt C

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

83

Dla mnie Mountain Lion 10.8.2 najczęściej głosowane rozwiązanie nie działa. Zainstalowałem jdk 1.7 przez Oracle i maven z homebrew.

Moje rozwiązanie pochodzi z pliku hadoop-env.sh hadoop, który również zainstalowałem z homebrew. Dodaję zdanie poniżej w ~ / .bash_profile i to działa.

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

To rozwiązanie działa również w systemie OS X Yosemite z Javą 1.8 zainstalowaną z Oracle.


1
Działałoby, gdybyś zainstalował java 6 z Apple. Chodzi o to, że korzystasz z Oracle Jave 7.
Olivier Refalo,

2
Działa to dla mnie bardzo dobrze w Mavricks, ale lokalizacja skryptu java_home jest inna. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost

1
Próbowałem skonfigurować maven na Mac Yosemite, w ten sposób ustawienie JAVA_HOME działa dla mnie.
Alocus

Działa dla mnie w Sierra 10.12 i Java 8
Kanak Sony

41

Żadna z powyższych odpowiedzi nie pomogła mi. Przypuszczam, że wszystkie odpowiedzi są dla starszychOS X

W przypadku systemu OS X Yosemite 10.10 wykonaj następujące kroki

Użyj swojego ulubionego edytora tekstu, aby otworzyć: ~/.bash_profile

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

Dodaj następujący wiersz do pliku i zapisz go (: następnie „x” dla vima):

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

Następnie w terminalu wpisz następujące dwa polecenia, aby wyświetlić dane wyjściowe:

$ source ~/.bash_profile

$ echo $JAVA_HOME

W drugim wierszu aktualizujesz zawartość .bash_profilepliku.


Myślę, że dostałem twój PB - używasz cudzysłowów zamiast cudzysłowów „vs”
Olivier Refalo

Nie, używam właściwych cytatów, zamiast tego próbowałem skopiować wklejanie, to nie działało. Zaktualizowałem swoją odpowiedź, ponieważ zadziałała dla mnie.
Giri

@OlivierRefalo Widzę, że zaktualizowałeś swoją odpowiedź podwójnymi cudzysłowami ("). Ale nawet bez cudzysłowów, to działa.
Giri

Wielkie dzięki . Dla mnie zadziałało w Yosemite 10.10
Vijay

2
To jedyne rozwiązanie, które naprawdę działa. Dodanie ścieżki dowolnym innym rozwiązaniem spowoduje tymczasowe dodanie, dopóki nie zakończysz terminala, a ścieżka zniknie. Aby dodać na stałe, ścieżkę należy zapisać w pliku .bash_profile. Tymczasem dla uproszczenia użyłem nano zamiast vim.
Nadeem Jamali

31

Aktualizacja dla Java 9 i kilka porządnych aliasów.

W .bash_profile:

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

Zauważ, że w najnowszej wersji tak jest 9i nie 1.9.

Ustaw aktywną Javę:

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

Niektóre dodatkowe aliasy do przełączania między różnymi wersjami:

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 w terminalu:

% 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)

EDYCJA: Aktualizacja dla Java 10

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

EDYCJA: Aktualizacja dla 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

Powyższe nie działało dla mnie z narzędziami Amazon EC2, ponieważ spodziewa się bin/javaitp JAVA_HOME. Poniżej . /System/Library/Frameworks/JavaVM.framework/Homezadziałało.


Czy to był lew? czy dostałeś oficjalny pakiet Java od Apple, czy Java6 / 7 od Oracle?
Olivier Refalo

Uważam, że był to pakiet Java firmy Apple.
Cawflands

1
@AndrewH tak, uważam, że to samo jest prawdą. Zainstalowałem pakiet Apple Apple i odkryłem rzeczywistą ścieżkę biblioteki (na przykład, aby ustawić -vm w eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub

Dzięki za informację. Może jestem zbyt prosty, ale dlaczego OS X czyni tak prostą rzecz kompletnym bałaganem?
Kuberchaun

18

W systemie OS X możesz wykonać:

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

Warto zauważyć, że HFS + nie uwzględnia wielkości liter.
sufinawaz

14

W systemie Mac OS X Lion, aby ustawić uruchamianie visualgc, użyłem:

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

1
Nie dostaję twojej propozycji: czym to się różni od eksportu JAVA_HOME = /usr/libexec/java_home ? polecenie / usr / libexec / java_home zwraca /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier

W przypadku visualgc / usr / libexec / java_home zwraca: Plik java.exe znaleziony pod adresem: / usr / libexec / java_home nie znajduje się w katalogu JDK. Ustaw i wyeksportuj zmienną środowiskową JVMSTAT_JAVA_HOME, aby odwoływała się do katalogu zawierającego JDK Sun J2SE 1.5.0 (nie JRE) i spróbuj ponownie.
EGHM

13

Poniższe działało dla mnie. Używam ZSH na OSX Yosemite z zainstalowaną Javą 8.

Następujące polecenie /usr/libexec/java_homeemituje ścieżkę do strony głównej JDK:

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

W twojej ~/.zshrc,

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

Czym różni się to od proponowanego rozwiązania?
Olivier Refalo

Nie różni się od proponowanego rozwiązania. To rozwiązanie jest przeznaczone dla osób używających ZSH, Java 8 i OSX Yosemite.
Hemanta

Potwierdzony, że działa jak urok z javą 1.8 zainstalowaną na OSX Yosemite, pozdrawiam kolego.
Ashoor,

Ogólne rozwiązanie działa dobrze dla Java 8, zsh i Yosemite.
yaauie

10

Lepszym (bardziej rozbudowalnym) sposobem jest użycie następujących opcji:

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

Powinno to działać również z AWS, ponieważ znajduje się binpod Home


1
w pewnym sensie nie zgadzam się z tym stwierdzeniem „więcej możliwości aktualizacji” / usr / libexec / java_home to exe, który zwraca ścieżkę, a nie stałą ścieżkę. Poza tym, w zależności od używanej wersji jvm, ścieżka powyżej nie będzie pasować
Olivier Refalo,

10

Wydaje się, że instalują się tutaj nowsze maszyny JVM Oracle, takie jak 1.7.0_21-b12:

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


1
Rzeczywiście - i /usr/libexec/java_homenarzędzie zwraca błąd dla tych wersji Java.
Joe Dyndale,

1
To jest jedyna odpowiedź, która działa dla mnie po pobraniu wersji
1.7

2
Jest to ścieżka, jeśli zainstalujesz środowisko JRE. Większość ocenionych odpowiedzi i komentarzy dotyczy JDK. Nie to samo.
Brak 1

9

dla macOS Mojave 10.14.1 i JAVA 11.0.1 Ustawiłem profil jako

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

wpisz w terminalu, aby potwierdzić:

$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
Działa na Catalinie. Ty
TuGordoBello,

5

Moje podejście to:

.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

Ułatwia to przełączanie między J6 i J7


@AdonisSMU znalazłeś rozwiązanie?
Luccas,

3

Musiałem wyraźnie ustawić tę ścieżkę na mojej MacBooku Air.

Kolejne kroki:

  1. spróbuj echo $JAVA_HOME(jeśli jest ustawiony, pokaże ścieżkę), jeśli nie, spróbuj go wyszukać za pomocąsudo find /usr/ -name *jdk
  2. Edytuj Bash p za pomocą - sudo nano ~/.bash_profile
  3. Dodaj dokładną ścieżkę do JAVA Home (ze ścieżką z kroku 2 powyżej) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Zapisz i wyjdź
  5. Sprawdź JAVA_Home, używając - echo $JAVA_HOME

Używam MACOS MOJAVE - 10.14.2 (18C54) na Macbooku Air z JAVA 8


2

W systemie Mac OS X 10.9 zainstalowałem najnowszą wersję środowiska JRE z bazy danych Oracle, a następnie zresetowałem JAVA_HOME do /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Jestem pewien, że jest lepszy sposób, ale zmusiłem mnie do działania.

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


1
W przypadku nowej instalacji Mavericks jest to jedyne rozwiązanie, które działało dla mnie. Musiałem skierować programistę sqdeveloper do znajdującego się tutaj domu jdk (jak sugeruje ten wątek, aby go uruchomić.
Chris

2

OSX Yosemite, ZSH i Java SE Runtime Environment 8, musiałem:

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

iw ~ / .zshrc zmień JAVA_HOME na export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"


1

Ten sam problem wystąpił po aktualizacji systemu Mac OS i działało dla mnie:

  1. cmd> vi ~ / .bash_profile

  2. Dodaj / zaktualizuj wiersz dla JAVA_HOME: eksportuj JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile lub otwórz nowy terminal

Myślę, że wersja jdk może się różnić, więc po prostu użyj wersji, którą masz w / Library / Java / JavaVirtualMachines /


1

Jeśli potrzebujesz wielu wersji JDK pod Mac OS X (Yosemite), pomocne może być dodanie skryptów do automatycznego przełączania między nimi.

Aby edytować profil ~ / .bash_profile i dodać następujące:

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

Skrypt najpierw usuwa inne wersje JDK z PATH , aby nie kolidowały z naszą nową wersją JDK. Następnie w pewien sprytny sposób wykorzystuje / usr / libexec / java_home, która jest poleceniem wyświetlającym listę zainstalowanych wersji JDK. -V argumentem mówi JAVA_HOME , aby powrócić na ścieżkę JDK w wersji dostarczonej na przykład 1.7. Aktualizujemy również ŚCIEŻKĘ, aby wskazywała katalog bin nowo znalezionego katalogu JAVA_HOME . Na koniec możemy po prostu wykonać funkcję za pomocą

setjdk 1.7

który wybiera najnowszą zainstalowaną wersję JDK oddziału 1.7. Aby wybrać konkretną wersję, wystarczy ją uruchomić

setjdk 1.7.0_51

zamiast. Uruchom / usr / libexec / java_home -V aby uzyskać więcej informacji na temat wyboru wersji.

PS Nie zapomnij o źródłowym ~ / .bash_profile po jego zapisaniu.


1

W przypadku języka Java 11 (JDK 11) można go zlokalizować za pomocą następującego polecenia:

/usr/libexec/java_home -v 11

0

Ta odpowiedź dotyczy Lwa Górskiego, a nie Lwa. Musiałem to zrobić dla narzędzi wiersza polecenia AWS. Według dokumentów AWS , uruchamianie which javazwraca/usr/bin/java .

Tak, ja ustawić JAVA_HOME=/usrw moim.bashrc .

Najwyraźniej /usr/bin/javajest to symboliczny link, /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javadzięki któremu wszystko działa.

Aktualizacja

Jak wspomniano w komentarzu poniżej, ta JAVA_HOMEwartość nie jest idealnym rozwiązaniem, gdy JAVA_HOMEzmienna środowiskowa ma być używana przez rzeczy inne niż Narzędzia wiersza polecenia AWS. Działa to dobrze w przypadku narzędzi wiersza polecenia AWS, jak podano w ich dokumentach.


chodzi o to, że / usr nie jest poprawnym katalogiem JAVA_HOME. Można zlokalizować bin / java. Ale czasami budowniczowie (mrówka, marka) używają JAVA_HOME do odwoływania się do kompilatora javac w lib / tools.jar Twoje rozwiązanie zawiedzie dla nich
Olivier Refalo

Dzięki za informację. Masz rację. Zaktualizuje odpowiedź.
Anjan

0

W przypadku systemu Mac Yosemite

Używa JDK 1.7.0_xx

$ 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

Czy możesz dodać więcej informacji, aby ta odpowiedź była przydatna.
Mika

0

Każda osoba korzystająca z AUSKEY z australijskiego urzędu skarbowego (ATO) powinna odinstalować AUSKEY. To rozwiązało moje problemy z JAVA_HOME.

Nie jest już także wymagany dla użytkowników MAC. Tak!


0

Używam powłoki Fish na High Sierra 10.13.4 i zainstalowałem Javę przez Brew.

Nie jest konfigurowany automatycznie, więc aby ustawić go poprawnie w moim systemie, uruchamiam:

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

0

Wystarczy ustawić java_home wersji 1.8 jdk w netbeans.confpliku:

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

linia odkomentowania:

netbeans_jdkhome="path/to/jdk"

i ustaw ścieżkę do twojego 1.8 jdk, w moim przypadku:

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

Podejście to zakłada posiadanie kilku wersji JDK na Mac OS


0

Dla użytkowników terminali Fish na Macu (myślę, że jest on również dostępny w systemie Linux), powinno to działać:

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

dla użytkowników komputerów Mac. java 8 powinna dodać

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.