Mac OS X e versioni multiple di Java


333

Come posso installare un java aggiuntivo su MacOS? Ho installato jdk8 e funziona perfettamente. ma ora ho bisogno di un'installazione jdk7 per scopi di sviluppo. Quando provo ad installare la vecchia versione tramite il file DMG, ricevo un avviso, che esiste già una versione più recente di java installata e il programma di installazione si chiude.

/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

Come installare jdk7 oltre a questo?

Grazie
Dakky

Risposte:


493

Il modo più pulito per gestire più versioni java su Mac è utilizzare Homebrew.

E dentro Homebrew, usa:

  • homebrew-cask per installare le versioni di java
  • jenv per gestire le versioni installate di java

Come visto su http://hanxue-it.blogspot.ch/2014/05/installing-java-8-managing-multiple.html , questi sono i passaggi da seguire.

  1. installa homebrew
  2. installa homebrew jenv
  3. installa homebrew-cask
  4. installa una specifica versione java usando cask (vedi il paragrafo "versioni homebrew-cask" sotto)
  5. aggiungi questa versione per jenv per gestirla
  6. controlla che la versione sia gestita correttamente da jenv
  7. ripetere i passaggi da 4 a 6 per ciascuna versione di java necessaria

versioni homebrew-botte

Aggiungi il homebrew/cask-versionsrubinetto a homebrew usando:

brew tap homebrew/cask-versions

Quindi puoi guardare tutte le versioni disponibili:

brew search java

Quindi puoi installare le versioni che ti piacciono:

brew cask install java7
brew cask install java6

E aggiungili per essere gestiti da jenv come al solito.

jenv add <javaVersionPathHere>

Penso che questo sia il modo più pulito e semplice per farlo.


Un'altra cosa importante da notare, come menzionato in Mac OS X 10.6.7 Java Path Current JDK confuso :

Per diversi tipi di JDK o installazioni, avrai percorsi diversi

Puoi controllare i percorsi delle versioni installate usando /usr/libexec/java_home -V, vedi Come posso verificare se Java JDK è installato su Mac?

Su Mac OS X Mavericks, ho trovato come segue:

1) predefinito JRE incorporato: /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) JDK scaricati da Apple: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3) JDK scaricati da Oracle: /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home


risorse


16
Sarebbe bene ricordare che homebrew-cask può essere installato con il comando brew install caskroom/cask/brew-caskinvece del brew install caskquale è un plug-in Emacs.
Unnawut,

7
Ho riscontrato alcuni problemi durante l'implementazione di questa soluzione, uno dei quali è stato con la jenvrestituzione No such file or directory.dell'errore. Questo wiki mi ha aiutato a risolverlo. github.com/gcuisinier/jenv/wiki/Trouble-Shooting
juil

10
Vorrei aggiungere che tutte le installazioni di Java sarebbero presenti /Library/Java/JavaVirtualMachines/e quando le aggiungi con jenv addte aggiungi un percorso simile a questo /Library/Java/JavaVirtualMachines/[specific-version]/Contents/Home/. Saluti!
Nikolay Tsenkov,

14
A partire dal 23 giugno 2017, corro brew cask search java7ma non ho trovato Cask per "java7".
Mingliang Liu,

4
@MingliangLIU anche a me ... fa davvero schifo. Ho trovato problemi su questo su Github dove sono stati menzionati alcuni aggiramenti ma non sono riuscito a farlo funzionare. Così ho finito per doverlo fare "in modo manuale" tramite le pagine web di "Java download e installazione" di Apple e Oracle. Quindi utilizzare /usr/libexec/java_home -Vper ricontrollare i percorsi in cui sono stati installati.
Adrien,

304

Disinstallare jdk8, installare jdk7, quindi reinstallare jdk8.

Il mio approccio al passaggio tra di loro (in .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

Quindi puoi semplicemente digitare java7o java8in un terminale per cambiare versione.

(modifica: aggiornato per aggiungere il miglioramento Dylans per Java 9)


18
Finora questa è l'opzione migliore per me. può facilmente passare a qualsiasi versione con un semplice comando "java8" o "java7". Grazie per l'aiuto
MMHMasud,

4
Grande ! :) E per altri come me puoi usare: ls / Library / Java / JavaVirtualMachines per vedere quali versioni sono disponibili. Quindi è possibile attivare diverse versioni 1.8.x. E inoltre devi aggiungere export PATH = $ JAVA_HOME / bin: $ PATH
Nico

4
Grazie per questo Volevo solo ricordare che sono riuscito a farlo installando jdk7 dopo jdk8 (non è necessario disinstallare jdk8).
Tito

6
Non so perché ho sprecato il mio tempo con jenv, dato che funziona e non ingombra l'avvio di shell di 0,5 secondi con jenv init.
cvakiitho,

2
Se stai cercando di far funzionare java 9 in questo modo, l'argomento della versione di java_home per java 9 dovrebbe essere semplicemente 9es.export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
Dylan Nissley,

125

Per macOS Sierra 420

Questa guida è stata messa insieme da varie fonti (risposte sopra e altri post) e funziona perfettamente.

0. Se non l'hai già fatto, installa homebrew.

Vedi https://brew.sh/

1. Installa jenv

brew install jenv

2. Aggiungi jenv al profilo bash

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

3. Aggiungi jenv al tuo percorso

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

4. Toccare "caskroom / versioni"

Cordiali saluti: "Tap" estende l'elenco dei repository disponibili di brew che può installare, oltre l'elenco dei repository disponibili di brew.

brew tap caskroom/versions

5. Installa l'ultima versione di java

brew cask install java

6. Installa java 6 (o 7 o 8 qualunque sia necessario)

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

? Forse chiudi e riavvia il Terminale in modo da vedere eventuali nuovi ENV che sono stati installati.

7. Rivedere le installazioni

Tutte le versioni di Java vengono installate qui: /Library/Java/JavaVirtualMachinesdiamo un'occhiata.

ls -la /Library/Java/JavaVirtualMachines

8. Aggiungi ogni percorso a jenv uno alla volta.

Dobbiamo aggiungere "/ Contenuti / Home" alla cartella della versione. ATTENZIONE: utilizzare i percorsi effettivi sulla vostra macchina ... sono solo ESEMPIO 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. Verificare che jenv sia registrato correttamente

jenv versions

10. Imposta la versione java da usare (globalmente)

Dove XX corrisponde a uno degli elementi nell'elenco delle versioni sopra.

jenv global XX

Controlla la versione java

java -version

Controlla le versioni jenv

Dovrebbe anche indicare la versione corrente utilizzata con un asterisco.

jenv versions

FATTO


Riferimento futuro rapido

Per modificare le versioni java

... Vedi l'elenco delle versioni java disponibili

jenv versions

... quindi, dove XX corrisponde a un elemento nell'elenco in alto

jenv global XX

1
Inoltre, riavvia il tuo terminale dopobrew cask install java*
spremere il

1
Spiegazione chiara e ottima passo dopo passo.
Ritesh Singh,

1
Errore: Cask 'java8' non è disponibile: non esiste Cask con questo nome.
Alexey Sh.

6
java8 / 9/10 non sono più disponibili come botti. Prova invece: "brew cask install adoptopenjdk / openjdk / adoptopenjdk8"
supi,

1
brew tap caskroom/versionsdovrebbe esserebrew tap homebrew/cask-versions
Vyacheslav Cotruta il

42

SDKMAN! è un ottimo strumento per l'utilizzo di più versioni di Java, Gradle, Groovy, Kotlin e altri strumenti JVM su Mac OS. I documenti di installazione e uso sono chiaramente sul sito principale.

(Non ho affiliazioni, solo un utente felice).

Ad esempio, se digito quanto segue in una finestra Terminale, c'è un elenco di versioni disponibili di Java SDK (modificate per brevità):

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

Qui +indica che la versione è installata. >indica quale versione è attualmente in uso. Per installare una versione:

$ sdk install java 7u141-zulu

Per utilizzare una versione in questa finestra del Terminale:

$ sdk use java 9ea170

sdkman supporta le versioni che iniziano con java 1.7. Se sei disposto a utilizzare java 1.6 questa soluzione potrebbe non essere adatta a te.
Aykut Akıncı

sdkman è eccezionale, ma non supportano versioni specifiche all'interno di una versione. Ad esempio Datastax Dev Center funziona solo con 1.8.0_151 ma non posso specificarlo con sdkman. Speriamo che aggiungano più versioni.
Eduardo Dennis,

Se hai una versione locale, penso che puoi installarlo in SDKMan - sdkman.io/usage#localversion (ma non l'ho provato)
Michael Easter,

6

Come si trova su questo sito Web Quindi iniziamo installando jEnv

  1. Esegui questo nel terminale

    brew install https://raw.github.com/gcuisinier/jenv/homebrew/jenv.rb
  2. Aggiungi jEnv al profilo bash

    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
  3. Alla prima installazione di jEnv non verrà associato alcun JDK.

    Ad esempio, ho appena installato JDK 8 ma jEnv non lo sa. Per controllare le versioni Java su jEnv

    Al momento ha trovato solo la versione Java (jre) sul sistema. Gli *spettacoli la versione attualmente selezionato. A differenza di rvm e rbenv, jEnv non può installare JDK per te. È necessario installare JDK manualmente dal sito Web Oracle.

  4. Installa JDK 6 dal sito Web Apple. Questo installerà Java in /System/Library/Java/JavaVirtualMachines/. Il motivo per cui stiamo installando Java 6 dal sito Web di Apple è che SUN non ha creato JDK 6 per MAC, quindi Apple ha creato / modificato la propria versione di distribuzione.

  5. Allo stesso modo installare JDK7 e JDK8.

  6. Aggiungi JDK a 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. Controlla le versioni java installate usando jenv

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

  8. Quindi ora abbiamo 3 versioni di Java sul nostro sistema. Per impostare una versione predefinita, utilizzare il comando

    jenv local <jenv version>

    Ex - Volevo che Jdk 1.6 avvii IntelliJ

    jenv local oracle64-1.6.0.65
  9. controlla la versione java

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

Questo è tutto. Ora abbiamo più versioni di Java e possiamo passare facilmente da una all'altra. jEnv ha anche alcune altre funzionalità, come i wrapper per Gradle, Ant, Maven, ecc. e la possibilità di impostare le opzioni JVM a livello globale o locale. Consulta la documentazione per ulteriori informazioni.


5
Non mettere le immagini dei tuoi comandi, è difficile copiarle / incollarle. Per evidenziare i comandi, utilizzare i tasti di scelta rapida "` "per una singola parola o un comando breve, oppure rientrare il comando con 4 spazi sulla propria riga (o multipli di 4 negli elenchi).
Seki,

1
Grazie Seki. Ho avuto difficoltà a pubblicare immagini e ho trascorso molto tempo a provare a formattare ma non sono riuscito a farlo bene. Grazie per aver condiviso le informazioni sui backtick.
Dinesh Arora,

4
Penso che potresti aver usato la stessa immagine quattro volte.
Ellen Spertus,

5

Trovo recentemente questo gestore di versioni Java chiamato Jabba e l'utilizzo è molto simile ai gestori di versioni di altre lingue come rvm (ruby), nvm (nodo), pyenv (python), ecc. Inoltre è multipiattaforma, quindi sicuramente può essere utilizzato su Mac.

Dopo l'installazione, creerà una directory in ~ / .jabba per mettere tutte le versioni Java installate. "Supporta l'installazione di Oracle JDK (impostazione predefinita) / Server JRE, Zulu OpenJDK (dalla 0.3.0), IBM SDK, Java Technology Edition (dalla 0.6.0) e da URL personalizzati.".

L'utilizzo di base è elencato sul loro Github. Un breve riepilogo per iniziare:

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

4

Sto usando Mac OS X 10.9.5. Questo è il modo in cui gestisco più JDK / JRE sul mio computer quando ho bisogno di una versione per eseguire l'applicazione A e utilizzare un'altra versione per l'applicazione B.

Ho creato il seguente script dopo aver ricevuto assistenza 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

Ho inserito lo script sopra nel file .profile. Basta aprire il terminale, digitare vi .profile, aggiungere lo script con lo snippet sopra e salvarlo. Una volta uscito source .profile, questo eseguirà lo script del tuo profilo senza che tu debba riavviare il terminale. Ora digita java -versiondovrebbe mostrare 1.7 come versione corrente. Se si intende modificarlo in 1.8, commentare la riga setjdk jdk1.7.0_15.jdke rimuovere il commento dalla riga setjdk jdk1.8.0_60.jdk. Salvare lo script ed eseguirlo di nuovo con il comando source. Uso questo meccanismo per gestire più versioni di JDK / JRE quando devo compilare 2 diversi progetti Maven che richiedono diverse versioni java.


3

Jenv su Mac Sierra:

se non funziona dopo l'installazione, eseguire questa correzione di bug per aggiungere eseguibile java al percorso

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

anche se eval "$(jenv init -)"potrebbe fare questo lavoro. Il motivo è che la cartella / bin non è più presente come descritto nella sua homepage, ma invece la cartella shim viene utilizzata come / bin.

  • Assicurati che ~ / .jenv sia lì
  • which java può stampare / Libreria / ...
  • jenv global 1.8
  • shell jenv 1.8

Alla fine, which javati dà:

/Users/xxxx/.jenv/shims/java


3

Con lo stesso spirito di @Vegard (leggero):

  • Installa i JDK desiderati con Homebrew
  • Inserisci questa jdkfunzione bash e un valore predefinito nel tuo.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
  • e poi, per cambiare il tuo jdk, puoi farlo

     jdk 9
     jdk 11
     jdk 13

Basato su https://github.com/AdoptOpenJDK/homebrew-openjdk .


0

Ecco una versione più ASCIUTTA per bash (Basato sulla risposta di Vegard)

Sostituisci 1.7 e 1.8 con qualunque versione ti interessi e otterrai un alias chiamato 'javaX'; dove "X" è la versione java (7/8 nello snippet di seguito) che ti consentirà di cambiare facilmente versione

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.