Jak zmienić domyślną wersję Java na Macu?
Jak zmienić domyślną wersję Java na Macu?
Odpowiedzi:
Pierwszy bieg, /usr/libexec/java_home -V
który wyświetli coś takiego:
Matching Java Virtual Machines (3):
1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
Wybierz wersję, która ma być domyślna ( 1.6.0_65-b14-462
ze względu na argumenty), a następnie:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
lub możesz podać tylko główną wersję, na przykład:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Teraz po uruchomieniu java -version
zobaczysz:
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
Dodaj export JAVA_HOME…
linię do pliku inicjującego powłokę.
W przypadku Bash (jak stwierdził antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Dla ryb (jak stwierdził ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
linii
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- zauważ również, że java_home pozwala na częściowe dopasowania, więc nie musisz dołączać pełnej wersji, ponieważ znajdzie ona najnowszą zainstalowaną. Ułatwia to aktualizacje.
Ta odpowiedź jest próbą rozwiązania: jak kontrolować wersję Java w całym systemie (nie tylko w aktualnie uruchomionej powłoce), gdy kilka wersji JDK jest zainstalowanych do celów programistycznych na macOS El Capitan lub nowszym (Sierra, High Sierra, Mojave) . O ile wiem, żadna z obecnych odpowiedzi tego nie robi (*).
Jako programista używam kilku JDK i chcę łatwo przełączać się między nimi. Zwykle mam najnowszą stabilną do ogólnego użytku, a drugą do testów. Ale nie chcę, aby system (np. Kiedy uruchamiam IDE) korzystał z najnowszej wersji „wczesnego dostępu”, którą mam na razie. Chcę kontrolować domyślne ustawienia systemu, które powinny być najnowszą stabilnością.
Poniższe podejście działa z Javą 7 do 12 przynajmniej (wczesny dostęp w momencie pisania tego tekstu), z Oracle JDK lub OpenJDK (w tym kompilacje AdoptOpenJDK wyprodukowane po połowie października 2018 r .).
/Library/Java/JavaVirtualMachines
. System domyślnie wybierze najwyższą wersję. Contents/Info.plist
wybrać JDK, zmień jego nazwę naInfo.plist.disabled
. Tego pakietu JDK można nadal używać, gdy $JAVA_HOME
wskazuje na niego, lub jawnie odwoływać się do niego w skrypcie lub konfiguracji. Zostanie po prostu zignorowany przez java
polecenie systemu .Program uruchamiający system użyje JDK z najwyższą wersją spośród tych, które mają Info.plist
plik.
Pracując w powłoce z alternatywnym JDK, wybierz metodę spośród istniejących odpowiedzi (jenv
lub niestandardowych aliasów / skryptów /usr/libexec/java_home
, itp.).
Szczegóły dochodzenia w tej treści .
(*) Bieżące odpowiedzi są albo przestarzałe (nie są już ważne dla macOS El Capitan lub Sierra), albo dotyczą tylko jednego JDK, lub nie odnoszą się do całego systemu. Wielu wyjaśnia, jak to zmienić $JAVA_HOME
, ale wpływa to tylko na bieżącą powłokę i to, co jest z niej uruchamiane. Nie wpłynie to na aplikację uruchomioną z programu uruchamiającego system operacyjny (chyba że zmienisz odpowiedni plik i wylogujesz się / zalogujesz, co jest uciążliwe). To samo dotyczy jenv, jest fajne i wszystko, ale o ile mogę powiedzieć, po prostu zmienia zmienne środowiskowe, więc ma takie same ograniczenia.
jenv
ani nie JAVA_HOME
jesteśmy w stanie ustawić systemowej wersji Java, tj. Tej , której użyłaby Eclipse.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Najwyraźniej jest to ten, który uruchomi nowe okienko Preferencji - to jedyny wyjątek, jaki znalazłem dla mojego rozwiązania: że thingy nadal będzie korzystać z JDK9 (najnowsza wersja, którą zainstalowałem), ale żadna inna aplikacja Java tego nie robi. ”
Dodając do powyższych odpowiedzi, umieściłem następujące wiersze w moim .bash_profile
(lub .zshrc
w systemie MacOS 10.15+), co sprawia, że przełączanie jest bardzo wygodne (w tym komentarz @ elektromin dla java 9):
alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"
Po wstawieniu uruchom $ source .bash_profile
Mogę przełączyć się na Javę 8, wpisując następujące polecenie:
$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"
a następnie pisanie j10
pozwala na powrót do aktualnej wersji Java (w moim przypadku Java 10)
nvm
przełączania wersji Java, ale akronim jvm
oznacza już coś innego :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Mała funkcja ryb oparta na / usr / libexec / java_home
function jhome
set JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
Jeśli nie używasz ryb, możesz zrobić coś podobnego w bash:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Następnie, aby przełączać się między Javami:
$> jhome #switches to latest java
$> jhome -v 1.7 #switches to java 1.7
$> jhome -v 1.6 #switches to java 1.6
export JAVA_HOME=(/usr/libexec/java_home $argv)
zamiast drugiej linii twojej jhome
funkcji.
Jest to trochę trudne, ale spróbuj wykonać kroki opisane w Instalowanie Java na OS X 10.9 (Mavericks) . Zasadniczo musisz zaktualizować swój alias do java
.
Krok po kroku:
Po zainstalowaniu JDK 1.7 musisz to zrobić sudo ln -snf
, aby zmienić link na bieżący java
. Aby to zrobić, otwórz Terminal i wydaj polecenie:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Zauważ, że katalog jdk1.7.0_51.jdk
może ulec zmianie w zależności od zainstalowanej wersji zestawu SDK.
Teraz musisz ustawić JAVA_HOME
punkt, w którym jdk_1.7.0_xx.jdk
został zainstalowany. Otwórz ponownie Terminal i wpisz:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
Możesz dodać export JAVA_HOME
powyższą linię .bashrc
do pliku, aby mieć java na stałe w swoim terminalu
JAVA_HOME
zostanie wyeksportowana w bieżącej sesji terminalu. Możesz dodać go do naszego, .bashrc
jeśli chcesz. Dostosuję polecenia do ostatniej wersji.
Użyj jenv to łatwy sposób.
1. zainstaluj jenv
curl -s get.jenv.io | grzmotnąć
2.Skonfiguruj jenv
cd ~ / .jenv / kandydaci / mkdir java cd java mkdir 1.7 mkdir 1.8
3. Połącz ścieżkę jdk
ln -s /Biblioteka/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / kandydaci / java / 1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / kandydaci / java / 1.8
4.Wszystko jest gotowe
polecenie przełączania:
jenv use java 1.8
ustaw domyślne:
jenv default Java 1.7
zainstaluj JDK, nie tylko JRE
/usr/libexec/java_home -v 1.8
daje
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
Kolejny
touch .bash_profile
open -a TextEdit.app .bash_profile
TextEdit wyświetli pustą stronę, którą możesz wypełnić.
dodaj do dokumentu:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
w terminalu:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
spróbuj wykonać polecenie:
javac -version
powinien generować:
javac 1.8.0_111
tl; dr
Dodaj linię:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
do pliku
~/.bash_profile
(zamień plik jdk1.8.0_144.jdk na pobraną wersję)
następnie source ~/.bash_profile
Użyj jenv, to jest jak menedżer środowiska Java. Jest bardzo łatwy w użyciu i czyszczeniu
W przypadku komputerów Mac wykonaj następujące czynności:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Instalacja: Jeśli używasz bash, wykonaj następujące kroki:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
Dodaj pożądane wersje JVM do jenv:
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
Sprawdź zainstalowane wersje:
jenv versions
Ustaw wersję Java, której chcesz używać:
jenv global oracle64-1.6.0
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
}
umieścić to w pliku ~ / .profile i używać go w terminalu jak tak setjdk 1.8
, setjdk 1.7
, setjdk 9
etc etc ...
Jeśli nie masz removeFromPath
, to:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Cztery proste kroki przy użyciu terminala dla osób korzystających z domyślnego procesu .. :)
echo $JAVA_HOME
daje ci aktualny dom Java. Na przykład:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
zabierze Cię do folderu, w którym normalnie instalujesz jdks (może być inaczej dla twoich komputerów)
ls
pokazuje dostępne foldery (zwykle będą miały numery wersji, na przykład jdk1.8.0_191.jdk openjdk-11.0.2.jdk
:)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
zmieni dom JavaMacOS El Capitan lub nowszy wybierze wyższą wersję JDK dostępną w /Library/Java/JavaVirtualMachines
, więc aby obniżyć wersję, możesz zmienić nazwę pliku Info.plist
na inną, Info.plist.disabled
tak aby system operacyjny wybrał poprzednią wersję.
Z oficjalnej strony Apple java_home (1) :
**USAGE**
/usr/libexec/java_home helps users set a $JAVA_HOME in their login rc files, or provides a way for
command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
tecture requirement. The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
which is useful for starting Java command-line tools from launchd plists without hardcoding the full
path to the Java command-line tool.
Usage for bash-style shells:
$ export JAVA_HOME=`/usr/libexec/java_home`
Usage for csh-style shells:
% setenv JAVA_HOME `/usr/libexec/java_home`
Najpierw dowiedz się, gdzie przechowujesz zmienne środowiskowe
Kroki, aby skonfigurować zmienną środowiskową: -
Teraz skonfiguruj zmienne środowiskowe w swoim pliku
za. W przypadku pliku emacs.profile możesz użyć tego linku LUB zobacz zrzut ekranu poniżej
b. Do konfiguracji profilu ZSH -
1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
2. source ~/.zshrc - Restart zshrc to reflect the changes.
3. echo $JAVA_HOME - make sure path is set up properly
----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
4. java -version
--> java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
Wszystko gotowe Teraz możesz łatwo uaktualnić lub zdegradować wersję JAVA.
Dostosowałem odpowiedź z @Alex powyżej i napisałem następujące, aby naprawić kod dla Java 9.
$ cat ~/.jdk
#!/bin/bash
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching java version $1";
requestedVersion=$1
oldStyleVersion=8
# Set the version
if [ $requestedVersion -gt $oldStyleVersion ]; then
export JAVA_HOME=$(/usr/libexec/java_home -v $1);
else
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
fi
echo "Setting JAVA_HOME=$JAVA_HOME"
which java
java -version;
}
$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
Jeśli nadal nie możesz go ustawić. za pomocą tego polecenia.
eksport JAVA_HOME =/usr/libexec/java_home -v 1.8
musisz użyć tego.
eksport JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
na pewno zadziała.
Możesz dodać go do swojego .bash_profile, aby domyślnie ustawić wersję.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Jeśli używasz ryb i używasz Maca i chcesz mieć możliwość przełączania się między JDK, to poniżej działa dla mnie na Macu.
Odpowiedź @ kenglxn nie zadziałała dla mnie i zorientowałem się, że bcos nie ustawił -g, co jest globalne!
Umieść poniżej w ~ / .config / fish / config.fish
alias j8="jhome -v 1.8.0_162"
alias j9="jhome -v 9.0.1"
function jhome
set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
end
funcsave jhome
Aby wiedzieć, którą wersję / wersję podrzędną zainstalowałeś, możesz:
/usr/libexec/java_home -V 579ms Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_162, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
Jeśli masz wiele wersji i chcesz uruchomić coś przy użyciu określonej wersji, skorzystaj z tego przykładu:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
Na podstawie odpowiedzi @markhellewell stworzyłem kilka funkcji aliasu, które zrobią to za Ciebie. Po prostu dodaj je do pliku startowego powłoki
#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
echo "Switching java version";
export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
java -version;
}
https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4
Oto jak to robię na moim Linuksie (kolega Ubuntu / Mint). Myślę, że Mac może to zrobić podobnie.
Kroki:
/mnt/star/program/java/jdk-1.8
ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
/mnt/star/program/java/java
jest miękkie łącze.JAVA_HOME
w skrypcie startowym. /etc/profile.d/eric.sh
lub po prostu użyć ~/.bashrc
. JAVA_HOME=/mnt/star/program/java/java
java -version
powinien wydrukować wersję Java./mnt/star/program/java/jdk-11
~/.bashrc
zdefiniuj zmienną dla różnych wersji Java. _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
_E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
# dir of default version,
_E_JAVA_HOME_D=$_E_JAVA_HOME_8
~/.bashrc
zdefiniuj polecenie przełączania wersji Java. ## switch java version,
alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
# default java version,
alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
alias jv="java -version"
source ~/.bashrc
aby zmiany zostały wprowadzone.Polecenia:
jv11
jv8
jvd
_E_JAVA_HOME_D
zdefiniowaną powyżej.jv
Przykładowe dane wyjściowe:
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
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)
eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
eric@eric-pc:~$
JAVA_HOME
.Podczas ręcznego instalowania jdk na moim komputerze zachowuję wersję pomocniczą, a następnie tworzę miękkie łącze z wersją główną, ale bez wersji dodatkowej.
np.
// to jest rzeczywisty katalog,
jdk1.8.0_191
// to jest miękki link do jdk1.8.0_191
jdk-8
// to jest miękki link do jdk-8
lubjdk-11
java
Definiuję alias polecenia w ~/.bashrc
, ale zmienną definiuję w osobnym pliku.
Używam ~/.eric_var
do definiowania zmiennych i ~/.bashrc
będę je pozyskiwał (np source $HOME/.eric_var
.).
Prostym sposobem na dołączenie osobno zainstalowanego JDK na podanej liście /usr/libexec/java_home -V
jest dowiązanie katalogu w następujący sposób:
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Na przykład, aby zarejestrować JDK dołączony do Android Studio (1.8.0_152 w momencie pisania), użyj:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Teraz java_home
wyświetli listę JDK poniżej Matching Java Virtual Machines
i możesz ją wybrać zgodnie z powyższym opisem.
Zrobiłem to dla lokalnego terminalu z
export JAVA_8_HOME=(/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/)
export JAVA_13_HOME=(/Library/Java/JavaVirtualMachines/jdk-13.0.1.jdk/Contents/Home/)
alias java8='export JAVA_HOME=$JAVA_8_HOME; alias java="$JAVA_8_HOME/bin/java"; $JAVA_8_HOME/bin/java -version'
alias java13='export JAVA_HOME=$JAVA_13_HOME; alias java="$JAVA_13_HOME/bin/java"; $JAVA_13_HOME/bin/java -version'
export JAVA_HOME=$JAVA_13_HOME
To narzędzie wykona za Ciebie pracę:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
Jest to prosta JavaOne, której można użyć do zdefiniowania bieżącej wersji Java. Wersja może być używana w powłoce, która jest otwierana po wybraniu wersji w narzędziu.
ZBYT ŁATWE ROZWIĄZANIE: Co za ból głowy - to było szybkie, łatwe rozwiązanie, które działało dla mnie.
Mac OS Sierra Wersja 10.12.13
Użyj klawiszy skrótu: CMD + SHIFT + G - wpisz „/ Library /”
Znajdź folder JAVA
Kliknij prawym przyciskiem myszy folder Java = Przenieś do kosza (wymagane hasło)
Zainstaluj: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Pobierz JavaScript SDK
/usr/libexec/java_home
ci wykonywanie ?