Mac OS X i wiele wersji Java

333

Jak mogę zainstalować dodatkową Javę na MacOS? Zainstalowałem jdk8 i to działa dobrze. ale teraz potrzebuję instalacji jdk7 do celów programistycznych. Kiedy próbuję zainstalować starą wersję za pomocą pliku DMG, pojawia się ostrzeżenie, że jest już zainstalowana nowsza wersja Java i instalator kończy pracę.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.8.0_20, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home

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

Jak zainstalować jdk7 oprócz tego?

Dzięki
Dakky

Dakkar
źródło

Odpowiedzi:

493

Najczystszym sposobem zarządzania wieloma wersjami Java na Macu jest użycie Homebrew.

Wewnątrz Homebrewużyj:

  • homebrew-cask aby zainstalować wersje java
  • jenv do zarządzania zainstalowanymi wersjami Java

Jak widać na http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , są to następujące kroki.

  1. zainstaluj homebrew
  2. zainstaluj homebrew jenv
  3. zainstaluj homebrew-cask
  4. zainstaluj określoną wersję Java za pomocą cask (patrz akapit „wersje homebrew-cask” poniżej)
  5. dodaj tę wersję, aby jenv mógł nią zarządzać
  6. sprawdź, czy wersja jest poprawnie zarządzana przez jenv
  7. powtórz kroki od 4 do 6 dla każdej potrzebnej wersji Java

wersje homebrew-cask

Dodaj homebrew/cask-versionskran do homebrew, używając:

brew tap homebrew/cask-versions

Następnie możesz przejrzeć wszystkie dostępne wersje:

brew search java

Następnie możesz zainstalować wersje, które lubisz:

brew cask install java7
brew cask install java6

I dodaj je, jak zwykle zarządza jenv.

jenv add <javaVersionPathHere>

Myślę, że jest to najczystszy i najprostszy sposób, aby to zrobić.


Kolejna ważna rzecz do zapamiętania, jak wspomniano w Mac OS X 10.6.7 Ścieżka Java Current JDK myląca :

Dla różnych typów JDK lub instalacji będziesz mieć różne ścieżki

Możesz sprawdzić ścieżki zainstalowanych wersji za pomocą /usr/libexec/java_home -V, zobacz Jak sprawdzić, czy Java JDK jest zainstalowany na Macu?

W systemie Mac OS X Mavericks znalazłem następujące informacje:

1) Domyślnie wbudowane środowisko JRE: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) Pliki JDK pobrane z Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) Pliki JDK pobrane z Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


Zasoby

Adrien Be
źródło
16
Warto wspomnieć, że homebrew-cask można zainstalować za pomocą polecenia brew install caskroom/cask/brew-caskzamiast brew install caskwtyczki Emacsa.
Unnawut
7
Podczas wdrażania tego rozwiązania napotkałem kilka problemów, z których jednym było jenvzwrócenie No such file or directory.błędu. Ta wiki pomogła mi to rozwiązać. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil
10
Dodałbym, że wszystkie instalacje Java byłyby włączone, /Library/Java/JavaVirtualMachines/a kiedy dodajesz je razem z jenv addtobą, dodaj ścieżkę wyglądającą tak /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Twoje zdrowie!
Nikolay Tsenkov
14
Od 23 czerwca 2017 r. brew cask search java7Działam, ale nie znaleziono Cask dla „java7”.
Mingliang Liu
4
@MingliangLIU ja też ja ... to naprawdę do bani. Znalazłem problemy na ten temat na Githubie, gdzie wspomniano o pewnych obejściach, ale nie mogłem tego zrobić. Skończyło się na tym, że musiałem to zrobić „ręcznie” za pośrednictwem stron internetowych „wersje Java” firmy Apple i Oracle, które pobierają i instalują. Następnie za pomocą /usr/libexec/java_home -Vdwukrotnie sprawdź ścieżki, w których zostały zainstalowane.
Adrien Be
304

Odinstaluj jdk8, zainstaluj jdk7, a następnie zainstaluj ponownie jdk8.

Moje podejście do przełączania się między nimi (w .profile):

export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)

alias java7='export JAVA_HOME=$JAVA_7_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'

#default java8
export JAVA_HOME=$JAVA_8_HOME

Następnie możesz po prostu pisać java7 lub java8w terminalu, aby przełączyć wersje.

(edytuj: zaktualizowano, aby dodać ulepszenie Dylans dla Java 9)

Vegard
źródło
18
Jak dotąd jest to dla mnie najlepsza opcja. łatwo można przejść do dowolnej wersji za pomocą prostego polecenia „java8” lub „java7”. Dzięki za pomoc
MMHMasud
4
Wspaniały ! :) A dla innych takich jak ja możesz użyć: ls / Library / Java / JavaVirtualMachines, aby zobaczyć, które wersje są dostępne. Następnie możesz włączyć różne wersje 1.8.x. A także musisz dodać PATH eksportu = $ JAVA_HOME / bin: $ PATH
Nico
4
Dzięki za to. Chciałem tylko wspomnieć, że udało mi się to zrobić, instalując jdk7 po jdk8 (nie ma potrzeby odinstalowywania jdk8).
Tytus
6
Nie wiem, dlaczego zmarnowałem swój czas na jenv, ponieważ to po prostu działa i nie zaśmieca uruchamiania powłoki o 0,5 s przy pomocy jenv init.
cvakiitho
2
Jeśli próbujesz zmusić java 9 do pracy w ten sposób, argumentem wersji java_home dla java 9 powinna być po prostu 9np.export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley,
125

Dla systemu macOS Sierra 420

Ten przewodnik został zebrany z różnych źródeł (powyższe odpowiedzi oraz inne posty) i działa idealnie.

0. Jeśli jeszcze tego nie zrobiłeś, zainstaluj homebrew.

Zobacz https://brew.sh/

1. Zainstaluj jenv

brew install jenv

2. Dodaj jenv do profilu bash

if which jenv > /dev/null; then eval "$(jenv init -)"; fi

3. Dodaj jenv do swojej ścieżki

export PATH="$HOME/.jenv/shims:$PATH"

4. Stuknij „caskroom / wersje”

FYI: „Tap” rozszerza listę dostępnych rep, które można zainstalować, ponad domyślną listę dostępnych rep.

brew tap caskroom/versions

5. Zainstaluj najnowszą wersję Java

brew cask install java

6. Zainstaluj java 6 (lub 7 lub 8 cokolwiek potrzebujesz)

brew cask install java6
#brew cask install java7
#brew cask install java8

? Być może zamknij i uruchom ponownie Terminal, aby zobaczył wszystkie nowe zmienne ENV, które zostały skonfigurowane.

7. Przejrzyj instalacje

Tutaj zainstalowana jest cała wersja Java: /Library/Java/JavaVirtualMachinesspójrzmy.

ls -la /Library/Java/JavaVirtualMachines

8. Dodaj każdą ścieżkę do jenv pojedynczo.

Musimy dodać „/ Contents / Home” do folderu wersji. OSTRZEŻENIE: Użycie rzeczywiste ścieżki na komputerze ... to tylko przykład S”

jenv add /Library/Java/JavaVirtualMachines/1.6.0___EXAMPLE___/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk___EXAMPLE___/Contents/Home

9. Sprawdź, czy jenv zarejestrował się OK

jenv versions

10. Ustaw wersję Java do użycia (globalnie)

Gdzie XX odpowiada jednemu z elementów z powyższej listy wersji.

jenv global XX

Sprawdź wersję Java

java -version

Sprawdź wersje jenv

Powinien również wskazywać, że bieżąca wersja jest używana z gwiazdką.

jenv versions

GOTOWY


Szybkie odniesienie w przyszłości

Aby zmienić wersje Java

... Zobacz listę dostępnych wersji Java

jenv versions

... wtedy, gdzie XX pasuje do pozycji z powyższej listy

jenv global XX
kok
źródło
1
Dodatkowo zrestartuj terminal pobrew cask install java*
ściśnij
1
Jasne i świetne wyjaśnienie krok po kroku.
Ritesh Singh,
1
Błąd: Beczka „java8” jest niedostępna: Nie istnieje beczka o tej nazwie.
Alexey Sh.
6
java8 / 9/10 nie są już dostępne jako beczki. Spróbuj zamiast tego: „brew cask install adoptopenjdk / openjdk / adoptopenjdk8”
supi
1
brew tap caskroom/versionspowinno byćbrew tap homebrew/cask-versions
Wiaczesław Cotruta
42

SDKMAN! jest doskonałym narzędziem do używania wielu wersji Javy, Gradle, Groovy, Kotlin i innych narzędzi JVM w Mac OS. Dokumentacja instalacji i użytkowania znajduje się na głównej stronie.

(Nie mam powiązania, po prostu szczęśliwy użytkownik).

Jako przykładowe użycie, jeśli wpiszesz następujące w oknie terminala, pojawi się lista dostępnych wersji Java SDK (edytowanych dla zwięzłości):

$ sdk list java
Available Java Versions
   + 9ea170                                                                        
 > + 8u131                                                                         
     7u141-zulu                     

Tutaj +oznacza, że ​​wersja jest zainstalowana. >oznacza, która wersja jest aktualnie używana. Aby zainstalować wersję:

$ sdk install java 7u141-zulu

Aby użyć wersji w tym oknie terminala:

$ sdk use java 9ea170
Michael Easter
źródło
sdkman obsługuje wersje zaczynające się od java 1.7. Jeśli chcesz używać Java 1.6, to rozwiązanie może nie być odpowiednie dla Ciebie.
Aykut Akıncı
sdkman jest świetny, ale nie obsługuje określonych wydań w ramach wersji. Na przykład Datastax Dev Center działa tylko z 1.8.0_151, ale nie mogę tego określić za pomocą sdkman. Mam nadzieję, że dodają więcej wersji.
Eduardo Dennis
Jeśli masz wersję lokalną, myślę, że możesz zainstalować ją w SDKMan - sdkman.io/usage#localversion (ale nie próbowałem)
Michael Easter
6

Jak można znaleźć na tej stronie Więc zacznijmy od instalacji jEnv

  1. Uruchom to w terminalu

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Dodaj jEnv do profilu bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Podczas pierwszej instalacji jEnv nie będzie z nim powiązany żaden JDK.

    Na przykład właśnie zainstalowałem JDK 8, ale jEnv o tym nie wie. Aby sprawdzić wersje Java na jEnv

    W tej chwili znalazła tylko wersję Java (jre) w systemie. W *Pokazuje wersję aktualnie wybrana. W przeciwieństwie do rvm i rbenv, jEnv nie może zainstalować JDK dla ciebie. Musisz zainstalować JDK ręcznie ze strony Oracle.

  4. Zainstaluj JDK 6 ze strony Apple. Spowoduje to zainstalowanie Java /System/Library/Java/JavaVirtualMachines/. Powodem, dla którego instalujemy Javę 6 ze strony Apple, jest to, że SUN nie wymyślił JDK 6 dla MAC, więc Apple stworzyło / zmodyfikowało własną wersję wdrożenia.

  5. Podobnie zainstaluj JDK7 i JDK8.

  6. Dodaj JDK do jEnv.

    JDK 6:

    JDK 7: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518ab9bc47d4.png

    JDK 8: http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abb2c1217.png

  7. Sprawdź wersje Java zainstalowane przy użyciu jenv

    http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abceb0deb.png

  8. Więc teraz mamy 3 wersje Java w naszym systemie. Aby ustawić domyślną wersję, użyj polecenia

    jenv local <jenv version>

    Ex - Chciałem, aby Jdk 1.6 uruchomił IntelliJ

    jenv local oracle64-1.6.0.65
  9. sprawdź wersję Java

    java -version http: //javahabi@javahabit.com/wp-content/uploads/2015/03/img_5518abe376dd0.png

Otóż ​​to. Mamy teraz wiele wersji Java i możemy łatwo przełączać się między nimi. jEnv ma również inne funkcje, takie jak opakowania dla Gradle, Ant, Maven itp. oraz możliwość ustawiania opcji JVM globalnie lub lokalnie. Sprawdź dokumentację, aby uzyskać więcej informacji.

Dinesh Arora
źródło
5
Nie umieszczaj obrazów swoich poleceń, utrudnia to ich kopiowanie / wklejanie. Aby podświetlić polecenia, użyj tylnych znaków „” dla pojedynczego słowa lub krótkiego polecenia, lub wciskaj swoje polecenie za pomocą 4 spacji we własnym wierszu (lub wielokrotności 4 na listach).
Seki
1
Dzięki, Seki. Miałem problemy z publikowaniem zdjęć i spędziłem dużo czasu próbując sformatować, ale nie mogłem tego zrobić poprawnie. Dziękujemy za udostępnienie informacji o backticksie.
Dinesh Arora,
4
Myślę, że mogłeś użyć tego samego obrazu cztery razy.
Ellen Spertus
5

Znajduję ostatnio tego menedżera wersji Java o nazwie Jabba, a jego użycie jest bardzo podobne do menedżerów wersji innych języków, takich jak rvm (ruby), nvm (węzeł), pyenv (python) itp. Również jest to platforma wieloplatformowa, więc na pewno można go używać na Prochowiec.

Po instalacji utworzy katalog w ~ / .jabba, aby umieścić wszystkie instalowane wersje Java. „Obsługuje instalację Oracle JDK (domyślnie) / Server JRE, Zulu OpenJDK (od 0.3.0), IBM SDK, Java Technology Edition (od 0.6.0) i niestandardowych adresów URL”.

Podstawowe użycie jest wymienione na ich Github. Krótkie podsumowanie na początek:

curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh

# install Oracle JDK
jabba install 1.8 # "jabba use 1.8" will be called automatically  
jabba install 1.7 # "jabba use 1.7" will be called automatically 

# list all installed JDK's
jabba ls

# switch to a different version of JDK
jabba use 1.8
York Yang
źródło
4

Używam Mac OS X 10.9.5. W ten sposób zarządzam wieloma JDK / JRE na moim komputerze, gdy potrzebuję jednej wersji do uruchomienia aplikacji A i używania innej wersji dla aplikacji B.

Utworzyłem następujący skrypt po uzyskaniu pomocy online.

#!bin/sh
function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/Library/Java/JavaVirtualMachines/'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=/Library/Java/JavaVirtualMachines/$1/Contents/Home
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
#setjdk jdk1.8.0_60.jdk
setjdk jdk1.7.0_15.jdk

Wstawiłem powyższy skrypt do pliku .profile. Po prostu otwórz terminal, wpisz vi .profile, dołącz skrypt z powyższym fragmentem i zapisz go. Po wprowadzeniu typu source .profileuruchomi się skrypt skryptu profilu bez konieczności ponownego uruchamiania terminala. Teraz wpisz java -versionpowinien pokazywać 1.7 jako aktualną wersję. Jeśli zamierzasz zmienić go na 1.8, skomentuj wiersz setjdk jdk1.7.0_15.jdki odkomentuj wiersz setjdk jdk1.8.0_60.jdk. Zapisz skrypt i uruchom go ponownie za pomocą polecenia source. Używam tego mechanizmu do zarządzania wieloma wersjami JDK / JRE, gdy muszę skompilować 2 różne projekty Maven, które wymagają różnych wersji Java.

ChaitanyaBhatt
źródło
3

Jenv na Mac Sierra:

jeśli nie działa po instalacji, popraw tę usterkę, aby dodać plik wykonywalny Java do ścieżki

export PATH="$HOME/.jenv/shims:$PATH"

chociaż eval "$(jenv init -)"może wykonać tę pracę. Powodem jest to, że folderu / bin już tam nie ma, jak opisano na stronie głównej, ale zamiast tego folder shim jest używany jako / bin.

  • Upewnij się, że ~ / .jenv tam jest
  • which java może wydrukować / Library / ...
  • jenv global 1.8
  • jenv shell 1.8

W końcu which javadaje:

/Users/xxxx/.jenv/shims/java

CodeFarmer
źródło
3

W tym samym duchu, co @Vegard (lekki):

  • Zainstaluj poszukiwane pakiety JDK za pomocą Homebrew
  • Umieść tę jdkfunkcję bash i domyślną w swoim.profile

    jdk() {
        version=$1
        export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
        java -version
     }
    
    export JAVA_HOME=$(/usr/libexec/java_home -v11); # Your default version
  • a następnie, aby przełączyć jdk, możesz to zrobić

     jdk 9
     jdk 11
     jdk 13

Na podstawie https://github.com/AdoptOpenJDK/homebrew-openjdk .

Hulius
źródło
0

Oto bardziej SUCHA wersja bash (na podstawie odpowiedzi Vegarda)

Zamień 1.7 i 1.8 na dowolne wersje, którymi jesteś zainteresowany, a otrzymasz alias o nazwie „javaX”; gdzie „X” to wersja Java (7/8 we fragmencie poniżej), która pozwoli ci łatwo przełączać wersje

for version in 1.7 1.8; do
    v="${version: -1}"
    h=JAVA_"$v"_HOME

    export "$h"=$(/usr/libexec/java_home -v $version)

    alias "java$v"="export JAVA_HOME=\$$h"
done
elad.chen
źródło
0

Używam tego, aby zainstalować nowsze wersje OpenJDK. Przykład dla OpenJDK 14:

brew info adoptopenjdk
brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk14

Aktualne informacje można znaleźć na https://github.com/AdoptOpenJDK/homebrew-openjdk .

Matthias Bohlen
źródło