Co powinienem ustawić zmienną środowiskową JAVA_HOME na macOS X 10.6?

436

Wiele aplikacji Java, które używają skryptów powłoki do skonfigurowania swojego środowiska, używa JAVA_HOMEzmiennej środowiskowej do uruchamiania poprawnej wersji Java, lokalizowania plików JRE JRE itd.

W systemie macOS X 10.6 następujące ścieżki wydają się poprawne dla tej zmiennej

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

Niektóre z nich to dowiązania symboliczne do rzeczywistej bieżącej maszyny wirtualnej (zgodnie z definicją w okienku preferencji Java).

Ale który z nich powinien zostać użyty - czy można w ogóle użyć któregoś z nich?

Robert Christie
źródło

Odpowiedzi:

849

Właśnie ustawiłem JAVA_HOMEwynik tej komendy, która powinna dać ci ścieżkę Java określoną w twoich preferencjach Java. Oto fragment mojego .bashrcpliku, który ustawia tę zmienną:

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

Nie spotkałem żadnych problemów z tą techniką.

Czasami muszę zmienić wartość JAVA_HOMEna wcześniejszą wersję Java. Na przykład jeden program, który prowadzę, wymaga 32-bitowej wersji Java 5 w systemie OS X, więc podczas korzystania z tego programu ustawiam JAVA_HOME, uruchamiając:

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

Dla tych z was, którzy nie mają java_homena swojej drodze, dodajcie to w ten sposób.

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

Referencje :

mipadi
źródło
20
Mountain Lion też to ma
sghill
57
Nadal obowiązuje w przypadku Mavericks
Pascal,
42
Nadal obowiązuje dla Yosemite. ;)
Geoffrey Wiseman
42
Kapitan. Czek!
gattshjoty,
11
Nadal obowiązuje dla Mojave
Keuha,
40

Interesujące jest również ustawienie ŚCIEŻKI odzwierciedlającej JDK. Po dodaniu JAVA_HOME (co można zrobić na przykładzie cytowanym przez „mipadi”):

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

Dodaj także w ~ / .profile:

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

PS: W OSX zwykle używam .profile w katalogu HOME zamiast .bashrc

lucasarruda
źródło
W OSX z domyślną wersją bash zazwyczaj używam bash .bash_profile- dlaczego używasz tego niż ogólny .profile?
LeeGee,
1
Ponieważ .profilejest ogólny, będzie działał z shlub bash, podczas gdy .bash_profilejest wyłączny dla bash. To również izoluje ustawienia od aplikacji, które używają .bash_profile, takich jak MacPorts. Ale możesz bezpiecznie użyć dowolnego z tych dwóch. Zobacz więcej na ten temat tutaj
lucasarruda
1
- FYI, podany przez Ciebie link potwierdza moje podejrzenie, że w ramach bash (tj. Domyślnie) użycie .bash_profileprzesłonięć .profile.
LeeGee
@LeeGee tak, i robi to, ponieważ .bash_profilejest specyficzny, podczas gdy .profileogólny, dla wszystkich shodmian.
lucasarruda
1
Ponieważ OS / X umieszcza link do javatwojego, /usr/binnie powinno być potrzeby jawnego dodawania $JAVA_HOMEdo twojej ścieżki.
Zac
20

Mam system MAC OS X (Sierra) 10.12.2 .

Ustawić JAVA_HOME do pracy na React Native (dla Android), wykonując następujące kroki.

  • Otwórz terminal (Command + R, wpisz Terminal, naciśnij ENTER).

  • Dodaj następujące wiersze do ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Teraz uruchom następujące polecenie. source ~/.bash_profile

  • Możesz sprawdzić dokładną wartość JAVA_HOME , wpisując następujące polecenie. echo $JAVA_HOME

Zwracana wartość (wynik) będzie wyglądać jak poniżej. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Otóż ​​to.

Hygull
źródło
To jest pomocne, dzięki. Ale wydaje mi się, że pominąłeś ostatni krok, czyli ustawienie JAVA_HOME na zwracaną wartość w .bashrc / .bash_profile / .zshrc / itd. Proszę mnie poprawić, jeśli się mylę.
TheProletariat
2
To nie jest wymagane. W moim przypadku $JAVA_HOMEodnosi się $(/usr/libexec/java_home)i $(/usr/libexec/java_home) jest wewnętrznie nazywany /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homeprzez System.
hygull
1
Rozumiem. Było to wymagane w moim przypadku. Dzięki.
TheProletariat
14

Jestem na Mac OS 10.6.8

Najłatwiejsze dla mnie rozwiązanie jest po prostu wprowadzone

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

Aby sprawdzić, czy to działa, włóż

$ echo $JAVA_HOME

to pokazuje

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

możesz także przetestować

$ which java
Rae
źródło
9

Zwykle używam /Library/Java/Home. Sposób działania panelu preferencji powinien być aktualny dla preferowanej wersji.

Clint
źródło
/ bin. i sprawdź, czy wskazuje on na / Library / java, a nie / System / Library / .., ponieważ może być nieaktualny.
JRun
1
To nie jest już dokładne. W systemie OS X 10.5 i nowszych użyj ścieżki / usr / libexec / java_home, aby znaleźć ścieżkę.
Kristopher Johnson
8

Powyższe nie działa już w YOSEMITE dla APLIKACJI GRAFICZNYCH! Jak zaćmienie lub cokolwiek, co zaczęło się od Spotlight. (.bash_profile, launchd.conf działa tylko dla sesji terminalowych.) Przed uruchomieniem Eclipse wystarczy otworzyć okno terminalu i wydać następujące polecenie:

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

(Ze ścieżką instalacyjną! Być może działa również z $ (/ usr / libexec / java_home) zamiast z pełną ścieżką.)

Zobacz cały doskonały artykuł na temat stałego rozwiązania tutaj: Ustawianie zmiennych środowiskowych za pomocą launchd.conf nie działa już w OS X Yosemite / El Capitan / macOS Sierra?

Pálossy László
źródło
2

Znalazłem ten stos, aby pomóc, miałem ten sam problem i mogłem naprawić:

Moja ścieżka Java była tutaj:

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

i musiałem umieścić w moim .bash_profile:

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

Mam nadzieję, że pomoc

Shirow
źródło
2

Pomijanie konfiguracji terminala, ponieważ wspomniałeś o aplikacjach, stałe ustawianie zmiennych środowiskowych systemu (działa dla macOS Sierra; powinno działać również dla El Capitan):

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

(ustawi to JAVA_HOME na najnowszą wersję 1.8 JDK, istnieje prawdopodobieństwo, że przeszedłeś przez aktualizacje serwerowe, np. javac 1.8.0_101, javac 1.8.0_131)
Oczywiście, zmień 1.8 z 1.7 lub 1.6 (naprawdę?), aby dopasować się do twoich potrzeb i twojego systemu

ericn
źródło
1

Jak zauważają inne odpowiedzi, poprawnym sposobem na znalezienie katalogu domowego Java jest użycie /usr/libexec/java_home.

Oficjalna dokumentacja na ten temat znajduje się w pytaniach technicznych Apple QA1170: Ważne katalogi Java w systemie OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
źródło
To jest duplikat!
Franklin Yu,
Myślę, że włączenie linku do oficjalnej dokumentacji Apple sprawia, że ​​nie jest ono zbędne. Ale jeśli tak, poprawnym działaniem jest oflagowanie go jako duplikatu, a nie komentowanie.
Kristopher Johnson
Zrobiłem komentarz, ponieważ nie mogę oznaczyć odpowiedzi jako duplikatu. Przepełnienie stosu pozwala tylko użytkownikowi oznaczyć pytanie jako duplikat (niestety). Link jest pomocny, ale myślę, że komentarz do bieżącej odpowiedzi (lub po prostu edytuj go za pomocą linku, ponieważ masz już taką możliwość) byłby lepszy, ponieważ skupia wszystkie przydatne informacje w jednej odpowiedzi. Wierzę, że była gdzieś wskazówka, że ​​Stack Overflow woli naprawiać aktualne odpowiedzi niż pisać nowe.
Franklin Yu
1

Dla mnie maven wydaje się działać na podstawie .mavenrcpliku:

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

Jestem pewien, że podniosłem go również na SO, po prostu nie pamiętam gdzie.

maksimov
źródło
1

Utwórz plik ~/.mavenrc

następnie wklej to do pliku

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

test

mvn -v

KhaledMohamedP
źródło
Podoba mi się to podejście, ponieważ pozwala mi bardzo łatwo zmienić wersję Java w pliku .mavenrc.
Spindizzy
1

Zaleca się sprawdzenie domyślnej powłoki terminala przed ustawieniem zmiennej środowiskowej JAVA_HOME za pomocą następujących poleceń:

$ echo $SHELL
/bin/bash

Jeśli domyślnym terminalem jest / bin / bash (Bash), powinieneś użyć metody @hygull

Jeśli domyślnym terminalem jest / bin / zsh (Z Shell), powinieneś ustawić te zmienne środowiskowe w pliku ~ / .zshenv o następującej treści:

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

Podobnie, każdy inny typ terminala niewymieniony powyżej, powinieneś ustawić zmienną środowiskową w odpowiednim pliku env terminala.

Ta metoda przetestowana w systemie macOS Mojave w wersji 10.14.6 .

Jerry Chong
źródło
-1

W przypadku użytkowników Fish Shell użyj czegoś takiego: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
źródło