Gdzie znajduje się JAVA HOME na macOS Sierra (10.12), El Capitan (10.11), Yosemite (10.10), Mavericks (10.9), Mountain Lion (10.8) lub OSX 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.

 496
Author: Mxdanger, 2011-07-06

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

Update: added - V flag based on odpowiedź .

 972
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
2017-05-23 12:02:45

/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.

 95
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.

 77
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.

 36
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

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.

 28
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

Aktualizacja dla Javy 9 i jakiś fajny alias.

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'
 18
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
2018-07-14 11:03:19

Dla OS X można zrobić:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
 17
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"
 13
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

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

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

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

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.

 -1
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

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!

 -1
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

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

 -2
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