Gdzie jest JAVA HOME na macOS Mojave (10.14) do Lion (10.7)?

Java jest opcjonalnym pakietem w najnowszych wersjach systemu macOS.

Jednak po zainstalowaniu wydaje się, że zmienna środowiskowa JAVA_HOMEjest nie ustawiona poprawnie.

 570
Author: Olivier Refalo, 2011-07-05

26 answers

Z zainstalowanym opcjonalnym pakietem Java lub Oracle JDK , dodanie jednej z następujących linii do ~/.plik bash_profile odpowiednio ustawi zmienną środowiskową.

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)"
or simply
export JAVA_HOME="$(/usr/libexec/java_home)"

Uwaga: jeśli zainstalowałeś openjdk na Macu używając brew , Uruchom sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk aby powyższe działanie zadziałało

Update: added - V flag based on odpowiedź .

 1066
Author: Olivier Refalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-12 08:41:37

/usr/libexec/java_home nie jest katalogiem lecz wykonywalnym. Wyświetla aktualnie skonfigurowany JAVA_HOME i nie zmienia go. Do tego służy aplikacja Java Preferences, która w moim przypadku wydaje się zepsuta i właściwie nie zmienia JVM poprawnie. Wyświetla listę 1.7 JVM, ale mogę przełączać / rozłączać i przeciągać i upuszczać wszystko, co chcę, bez zmieniania 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, to nadal wrócił Apple 1.6 java home. Jedyną poprawką, która faktycznie działa dla mnie, jest ręczne ustawienie JAVA_HOME:

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

Przynajmniej w ten sposób po uruchomieniu z linii poleceń użyje 1.7. /usr/libexec/java_home nadal nalega na 1.6.

Aktualizacja: zrozumienie Javy z wiersza poleceń na OSX ma lepsze wyjaśnienie, jak to działa.

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

Jest sposób, aby to zrobić. Uwaga, aktualizacja do wersji 1.8 działa dobrze.

 116
Author: Jilles van Gurp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 18:39:51

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

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

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

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

 83
Author: onpduo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-13 13:57:52

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

Dla OS X Yosemite 10.10, wykonaj następujące kroki

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

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

Dodaj następujący wiersz w pliku i zapisz go (: po którym następuje "x" dla Vima):

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

Następnie w terminalu wpisz następujące dwa polecenia, aby zobaczyć wyjście:

$ source ~/.bash_profile

$ echo $JAVA_HOME

W drugiej linii aktualizujesz zawartość pliku .bash_profile.

 41
Author: Giri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-30 12:42:39

Aktualizacja dla Javy 9 i kilka fajnych 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 dla najnowszej wersji jest to 9, a nie 1.9.

Set active Java:

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

Jakiś dodatkowy alias 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)

EDIT: Update for Java 10

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

EDIT: Update for Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
 31
Author: Peter Keller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-13 19:44:38

Powyższe nie zadziałało dla mnie z narzędziami EC2 Amazona, ponieważ oczekuje bin/java itp. pod spodem JAVA_HOME. Zadziałało.

 29
Author: Cawflands,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-29 14:07:47

Dla OS X można zrobić:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
 19
Author: sufinawaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-08 17:10:27

Na Mac OS X Lion, aby ustawić visualgc do uruchomienia, użyłem:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
 14
Author: EGHM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 00:20:10

Następujące zadziałały dla mnie. Używam ZSH na OSX Yosemite z zainstalowaną Javą 8.

Następujące polecenie /usr/libexec/java_home emituje ścieżkę do JDK home:

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

W Twoim ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
 14
Author: Hemanta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 02:39:22

Lepszym (bardziej rozbudowywalnym) sposobem jest użycie:

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

To powinno działać z AWS również ponieważ ma bin pod domem

 10
Author: czarcrab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 15:04:52

Nowsze Oracle JVMs takie jak 1.7.0_21-b12 wydają się instalować tutaj:

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

 10
Author: Archie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-03 16:43:45

Dla macOS Mojave 10.14.1 i JAVA 11.0.1 Ustawiam profil jako

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

Klucz w terminalu do potwierdzenia:

$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)
 9
Author: Jiulong Zhao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-12 06:32:06

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

To sprawia, że bardzo łatwo przełączać się między J6 i J7

 5
Author: Mike Mitterer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 10:45:16

Musiałem wyraźnie ustawić dokładną ścieżkę na moim MacBooku air .

Kolejne kroki:

  1. spróbuj echo $JAVA_HOME (jeśli jest ustawione, pokaże ścieżkę), jeśli nie, spróbuj wyszukać go za pomocą sudo find /usr/ -name *jdk
  2. Edit the Bash P with - 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 zakończ
  5. Sprawdź JAVA_Home używając - echo $JAVA_HOME
[5]}używam MACOS MOJAVE - 10.14.2 (18C54) na MacBooku Air z Javą 8
 3
Author: Robin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-13 19:33:22

Dla Mac OS X 10.9 zainstalowałem najnowszą wersję JRE od 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 mnie uruchomił.

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

 2
Author: Hugh Brien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 23:36:39

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

I w ~/.zshrc Zmień JAVA_HOME na export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"

 2
Author: mmell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-19 19:26:27

Mam ten sam problem po uaktualnieniu mojego Mac OS i następujące działało dla mnie:

  1. Cmd > vi ~/.bash_profile

  2. Dodaj / zaktualizuj wiersz dla JAVA_HOME: export 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 pod /Library / Java / JavaVirtualMachines /

 1
Author: user1270392,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 17:33:28

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

To co robisz to edytowanie swojego ~/.bash_profile i dodać:

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 w ścieżce , aby nie kolidowały z naszą nową wersją JDK. Następnie sprytnie wykorzystuje / usr / libexec / java_home, które jest poleceniem, które wyświetla zainstalowane wersje JDK. Argument - v mówi java_home aby zwrócił ścieżkę JDK z dostarczoną wersją, na przykład 1.7. Aktualizujemy również ścieżkę , aby wskazać katalog bin nowo znalezionego katalogu JAVA_HOME. Na końcu możemy po prostu wykonać funkcję używając

setjdk 1.7

Który wybiera najnowszą zainstalowaną wersję JDK gałęzi 1.7. Aby wybrać konkretną wersję, możesz po prostu wykonać

setjdk 1.7.0_51
Zamiast tego. Bieg / usr / libexec / java_home-v aby uzyskać więcej informacji na temat wyboru wersji.

P. S. nie zapomnij źródło~/.bash_profile po zapisaniu.

 1
Author: azec-pdx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-10 07:50:04

Dla użytkowników terminala Fish na Macu (sądzę, że jest również dostępny na Linuksie), 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
Author: Jaguar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-15 17:05:17

Dla Java 11 (JDK 11) może być umieszczony za pomocą następującego polecenia:

/usr/libexec/java_home -v 11
 1
Author: Pavel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-09 09:15:08

Ta odpowiedź jest związana z Lwem górskim , a nie z Lwem. Musiałem to zrobić dla narzędzi wiersza poleceń AWS. Zgodnie z AWS docs, running which java zwraca /usr/bin/java.

Więc ustawiłem JAVA_HOME=/usr w moim .bashrc.

Najwyraźniej /usr/bin/java jest dowiązaniem symbolicznym do {[5] } co sprawia, że wszystko działa.

Update

Jak wspomniano w komentarzu poniżej, ta wartość JAVA_HOME nie jest idealnym rozwiązaniem, gdy zmienna środowiskowa JAVA_HOME ma być używana przez rzeczy inne niż narzędzia wiersza poleceń AWS. Działa dobrze dla narzędzi wiersza poleceń AWS, jak podano w ich dokumentach.

 0
Author: Anjan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-29 07:55:12

Dla użytkowników komputerów mac . java 8 powinna dodawać

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

 0
Author: Kewin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 14:53:48

Dla Mac Yosemite,

JDK 1.7. 0_xx używa

$ 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
 0
Author: Mikey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-16 16:14:46

Każdy, kto używa AUSKEY z australijskiego urzędu skarbowego (ATO), powinien odinstalować AUSKEY. To rozwiązało moje problemy z JAVA_HOME.

Nie jest już wymagany dla użytkowników komputerów MAC. Yah!

 0
Author: kate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-04 10:14:42

Używam Fish shell Na High Sierra 10.13.4 i zainstalowałem Javę przez Brew.

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

set -U JAVA_HOME (/usr/libexec/java_home)
 0
Author: chrismacp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-06 13:39:55

Ustaw java_home wersji 1.8 jdk w pliku netbeans.conf:

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

Linia Uncomment:

netbeans_jdkhome="path/to/jdk"

I ustaw ścieżkę do swojego 1.8 jdk, w moim przypadku:

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

To podejście zakłada, że masz kilka wersji jdk na mac os

 0
Author: Alexander Kolundaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-07 15:46:07