Jak ustawić lub zmienić domyślną wersję Java (JDK) w systemie OS X?


775

Jak zmienić domyślną wersję Java na Macu?


2
co mówi /usr/libexec/java_homeci wykonywanie ?
Bart

2
/ usr / libexec / java_home zwraca /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Venkat

Być może po prostu musisz zrestartować komputer. Próbowałeś tego?
Bart

Tak, uruchomiłem ponownie komputer i terminal ... bez zmian.
Venkat

3
Czy możesz zaakceptować wysoko głosowaną odpowiedź z @markhellewell poniżej? Pomogłoby mi to znaleźć trochę szybciej i jest po prostu fajne. :)
Taytay

Odpowiedzi:


1404

Pierwszy bieg, /usr/libexec/java_home -Vktó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-462ze 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 -versionzobaczysz:

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)

2
@ MattO'Brien jest to coś, co zależy od używanej powłoki i konfiguracji, którą masz na miejscu, więc nie mogę dać kompletnego rozwiązania tego…
markhellewell

11
te naprawdę są w odwrocie exportlinii
David West

6
To mi nie zadziałało. Chwyć ścieżkę od uruchomienia java_home -V i dodaj to do polecenia eksportu, tak jak ten eksport JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home"
od

68
Działa to w Bash - 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.
antonyh

14
Upewnij się, że używasz `` nie '' do eksportu.
zamieć

407

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

Rozwiązanie bez narzędzi innych firm:

  • pozostaw wszystkie pakiety JDK w domyślnej lokalizacji, poniżej /Library/Java/JavaVirtualMachines. System domyślnie wybierze najwyższą wersję.
  • Aby domyślnie Contents/Info.plistwybrać JDK, zmień jego nazwę naInfo.plist.disabled . Tego pakietu JDK można nadal używać, gdy $JAVA_HOMEwskazuje na niego, lub jawnie odwoływać się do niego w skrypcie lub konfiguracji. Zostanie po prostu zignorowany przez javapolecenie systemu .

Program uruchamiający system użyje JDK z najwyższą wersją spośród tych, które mają Info.plistplik.

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.


16
To była odpowiedź, której szukałem, ponieważ jenvani nie JAVA_HOMEjesteśmy w stanie ustawić systemowej wersji Java, tj. Tej , której użyłaby Eclipse.
Giovanni Lovato,

3
@Rodrigo Tak, jak wspomniano w „Szczegółach dochodzenia” (link powyżej): „Instalowanie JDK również nadpisuje /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. ”
Hugues M.,

2
Warto zauważyć, że wersje java znajdują się w / Library / Java / JavaVirtualMachines i że powyższe doskonałe działające rozwiązanie znajduje się w tym kontekście.
Andrew Kostka,

3
To właśnie jest najlepsze i najbardziej funkcjonalne rozwiązanie tego pytania. Niestety tak.
Aerodynamika,

3
Nie mogę ci wystarczająco podziękować za tę odpowiedź. To naprawiło uruchamianie aplikacji z programu uruchamiającego system operacyjny.
Karthic Raghupathi

247

Dodając do powyższych odpowiedzi, umieściłem następujące wiersze w moim .bash_profile(lub .zshrcw 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)

5
Oto składnia Java 9: alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
elektromin

3
Niesamowite proste aliasy do szybkiego przełączania.
gbonetti

Używanie, alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version"a następnie pisanie j10pozwala na powrót do aktualnej wersji Java (w moim przypadku Java 10)
intagli

Zrobiłbym narzędzie cli podobne do nvmprzełączania wersji Java, ale akronim jvmoznacza już coś innego :)
Andy

/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Występuje

55

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

ref: https://gist.github.com/kenglxn/1843d552dff4d4233271


1
zmienia się to tylko dla określonej sesji terminala. Czy istnieje sposób na zaktualizowanie tego, aby zmienić go na cały system?
ENG618

1
Musiałem napisać export JAVA_HOME=(/usr/libexec/java_home $argv)zamiast drugiej linii twojej jhomefunkcji.
Daniel AA Pelsmaeker,

32

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_HOMEpunkt, w którym jdk_1.7.0_xx.jdkzostał 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_HOMEpowyższą linię .bashrcdo pliku, aby mieć java na stałe w swoim terminalu


1
jak ustawić zmienną JAVA_HOME? czy jest jakieś szczególne miejsce, w którym je ustawiłem?
Venkat

gdzie eksportuję JAVA_HOME? i gdzie to zostanie zapisane?
Venkat

1
Zaktualizowałem odpowiedź. Czy znasz zainstalowaną wersję zestawu SDK? Nazwa folderu ma numer wersji zestawu SDK, więc powyższe polecenia mogą się nieco zmienić.
Trein

Zainstalowałem najnowszy, myślę, że to 51.
Venkat

Zmienna JAVA_HOMEzostanie wyeksportowana w bieżącej sesji terminalu. Możesz dodać go do naszego, .bashrcjeśli chcesz. Dostosuję polecenia do ostatniej wersji.
Trein

32

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


Czyste i ładne rozwiązanie.
pinturyczny

Zamiast „jenv use java 1.8” musiałem użyć „jenv shell 1.8”. „powłoka” może być również „globalna” lub „lokalna”, w zależności od potrzeby.
Steve Gelman,

1
jenv jest fajny, kiedy działa. Odradzałbym to jednak, ponieważ tak naprawdę nie „zmienia” domyślnej używanej wersji Java, widocznej po uruchomieniu polecenia „/ usr / libexec / java_home -V”, tylko JAVA_HOME. Powoduje to dziwne problemy z niektórymi aplikacjami, np. Eclipse.
simon

Poza tym ta paranoidalna część mnie sugeruje, żeby nie zwijać czegokolwiek, co mogłoby się zepsuć. Nawet jeśli uważasz, że witryna jest zaufana, nikt nie może zagwarantować , że nie da się jej zhakować. Użyj menedżera pakietów systemu operacyjnego.
Aleksandr Kravets,

Ta informacja jest nieaktualna. Sprawdź oficjalną dokumentację lub bardziej szczegółowe instrukcje .
fabianopinto

28

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

26

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


22

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

To działało idealnie dla mnie, dzięki!
Fernando Gabrieli

Używam podobnego narzędzia: sdkman.io/usage - IMHO znacznie lepsze podejście niż ręczne aliasy itp.
SathOkh

12
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 9etc etc ...

Jeśli nie masz removeFromPath, to:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }


12

Cztery proste kroki przy użyciu terminala dla osób korzystających z domyślnego procesu .. :)

  1. echo $JAVA_HOMEdaje ci aktualny dom Java. Na przykład:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

  2. cd /Library/Java/JavaVirtualMachines/ zabierze Cię do folderu, w którym normalnie instalujesz jdks (może być inaczej dla twoich komputerów)

  3. lspokazuje dostępne foldery (zwykle będą miały numery wersji, na przykład jdk1.8.0_191.jdk openjdk-11.0.2.jdk:)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' zmieni dom Java

8

dodaj następujące polecenie do ~/.zshenvpliku

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

8

MacOS 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.plistna inną, Info.plist.disabledtak aby system operacyjny wybrał poprzednią wersję.


Najłatwiejszy sposób na (: Dzięki
Satheesh Srinivasan

6

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`

6

Najpierw dowiedz się, gdzie przechowujesz zmienne środowiskowe

  1. emacs
  2. bash_profile
  3. plik zshrc

Kroki, aby skonfigurować zmienną środowiskową: -

  1. Pobierz jdk z JAVA
  2. zainstaluj go podwójnym kliknięciem
  3. 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

wprowadź opis zdjęcia tutaj

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.


5

Skrypt JDK Switch

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

Przełącz się na Javę 8

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

Przejdź do Java 9

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

5

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.


4

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

Dzięki! Warto zauważyć, że musisz dołączyć znaki `. i oczywiście zamień 1.8 na dowolną wersję, której możesz potrzebować. W moim przypadku 13.0.2
Jamie S

3

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

2

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

2

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


2

Oto jak to robię na moim Linuksie (kolega Ubuntu / Mint). Myślę, że Mac może to zrobić podobnie.


Zainstaluj i skonfiguruj

Kroki:

  • [Podstawowy - część]
  • Pobierz jdk ( plik .tgz ) ręcznie.
  • Rozpakuj i zmień nazwę poprawnie, w odpowiednim miejscu.
    na przykład /mnt/star/program/java/jdk-1.8
  • Utwórz miękki link, który zostanie zmieniony, aby zmienić wersję Java później.
    np. ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    Tak /mnt/star/program/java/javajest miękkie łącze.
  • Ustaw JAVA_HOMEw skrypcie startowym.
    Można użyć pliku podobnego /etc/profile.d/eric.shlub po prostu użyć ~/.bashrc.
    na przykładJAVA_HOME=/mnt/star/program/java/java
  • Następnie otwórz nową powłokę bash. java -versionpowinien wydrukować wersję Java.
  • [Więcej wersji - część]
  • Pobierz i zainstaluj więcej wersji Java, w razie potrzeby, podobnie jak w powyższych krokach.
    na przykład
    /mnt/star/program/java/jdk-11
  • [Switch - part]
  • W ~/.bashrczdefiniuj zmienną dla różnych wersji Java.
    na przykład
    _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
  • W ~/.bashrczdefiniuj polecenie przełączania wersji Java.
    na przykład
    ## 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"
  • W terminalu, source ~/.bashrcaby zmiany zostały wprowadzone.
  • Następnie można przełączyć przy użyciu zdefiniowanych poleceń.

Polecenia - z powyższej konfiguracji

Polecenia:

  • jv11
    Przełącz się na Javę 11
  • jv8
    Przełącz się na Javę 8
  • jvd
    Przełącz na domyślną wersję Java, która jest oznaczona przez _E_JAVA_HOME_Dzdefiniowaną powyżej.
  • jv
    Pokaż wersję Java.

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:~$ 

Mechanizm

  • Przełącza się, zmieniając miękkie łącze, które jest używane jako JAVA_HOME.

Porady

  • 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-8lubjdk-11
    java

  • Definiuję alias polecenia w ~/.bashrc, ale zmienną definiuję w osobnym pliku.
    Używam ~/.eric_vardo definiowania zmiennych i ~/.bashrcbędę je pozyskiwał (np source $HOME/.eric_var.).


1

Prostym sposobem na dołączenie osobno zainstalowanego JDK na podanej liście /usr/libexec/java_home -Vjest 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 Machinesi możesz ją wybrać zgodnie z powyższym opisem.


1

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


-6

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

  1. Użyj klawiszy skrótu: CMD + SHIFT + G - wpisz „/ Library /”

  2. Znajdź folder JAVA

  3. Kliknij prawym przyciskiem myszy folder Java = Przenieś do kosza (wymagane hasło)

  4. Zainstaluj: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Pobierz JavaScript SDK

  5. Upewnij się, że nowy folder JAVA pojawia się w / LIBRARY /
  6. Zainstaluj Eclipse | Zainstaluj Eclipse IDE dla programistów Java
  7. Boom Gotowe
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.