Come puoi modificare la versione predefinita di Java su un mac?
Come puoi modificare la versione predefinita di Java su un mac?
Risposte:
Prima esecuzione /usr/libexec/java_home -V
che produrrà qualcosa di simile al seguente:
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
Scegli la versione che vuoi impostare come predefinita ( 1.6.0_65-b14-462
per amor di argomenti) quindi:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`
oppure puoi specificare solo la versione principale, come:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Ora quando corri java -version
vedrai:
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)
Aggiungi la export JAVA_HOME…
linea al file init della tua shell.
Per Bash (come affermato da antonyh ):
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Per i pesci (come dichiarato da ormurin)
set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)
export
linea
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
- nota anche, java_home consente corrispondenze parziali, quindi non devi includere la versione completa in quanto troverà l'ultima installata. Questo semplifica gli aggiornamenti.
Questa risposta è un tentativo di indirizzo: come controllare la versione java a livello di sistema (non solo nella shell attualmente in esecuzione) quando sono installate diverse versioni di JDK a scopo di sviluppo su macOS El Capitan o più recenti (Sierra, High Sierra, Mojave) . Per quanto ne so, nessuna delle risposte attuali lo fa (*).
Come sviluppatore, utilizzo diversi JDK e desidero passare facilmente dall'uno all'altro. Di solito ne ho l'ultima stabile per uso generale e altre per i test. Ma non voglio che il sistema (ad es. Quando avvio il mio IDE) usi l'ultima versione di "accesso anticipato" che ho per ora. Voglio controllare l'impostazione predefinita del sistema e dovrebbe essere l'ultima stabile.
L'approccio seguente funziona almeno con Java 7-12 (accesso anticipato al momento della stesura di questo documento), con Oracle JDK o OpenJDK (inclusi i build di AdoptOpenJDK prodotti dopo la metà di ottobre 2018 ).
/Library/Java/JavaVirtualMachines
. Il sistema sceglierà la versione più alta per impostazione predefinita. Contents/Info.plist
inInfo.plist.disabled
. Quel JDK può ancora essere usato quando $JAVA_HOME
punta ad esso, o fatto esplicitamente riferimento in uno script o in una configurazione. Sarà semplicemente ignorato dal java
comando di sistema .Il programma di avvio del sistema utilizzerà JDK con la versione più alta tra quelle che dispongono di un Info.plist
file.
Quando lavori in una shell con JDK alternativo, scegli il tuo metodo tra le risposte esistenti ( jenv
o alias / script personalizzati intorno /usr/libexec/java_home
, ecc.).
Dettagli delle indagini in questo senso .
(*) Le risposte attuali sono obsolete (non sono più valide per macOS El Capitan o Sierra) o riguardano solo un singolo JDK o non trattano l'aspetto dell'intero sistema. Molti spiegano come cambiare $JAVA_HOME
, ma questo influisce solo sulla shell corrente e su ciò che viene lanciato da lì. Non influirà su un'applicazione avviata dal programma di avvio del sistema operativo (a meno che non modifichi il file corretto e disconnetti / accedi, il che è noioso). Lo stesso per jenv, è fantastico e tutto, ma per quanto ne so, cambia semplicemente le variabili di ambiente, quindi ha lo stesso limite.
jenv
né JAVA_HOME
sono in grado di impostare la versione java a livello di sistema, ovvero quella che Eclipse avrebbe usato.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/
. Apparentemente questo è quello che verrà lanciato il nuovo pannello Preferenze - questa è l'unica eccezione che ho trovato nella mia soluzione: quella continuerà a usare JDK9 (l'ultimo installato), ma nessun'altra applicazione Java lo fa. "
Aggiungendo le risposte di cui sopra, ho inserito le seguenti righe nel mio .bash_profile
(o .zshrc
per MacOS 10.15+), il che rende davvero comodo il passaggio (incluso il commento di @ elektromin per 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"
Dopo aver inserito, eseguire $ source .bash_profile
Posso passare a Java 8 digitando quanto segue:
$ 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"
e la digitazione j10
consentono di tornare alla versione corrente di Java (nel mio caso Java 10)
nvm
per cambiare versione Java, ma l'acronimo jvm
significa già qualcos'altro :)
/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
Una piccola funzione di pesce basata su / 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
Se non usi il pesce, puoi fare qualcosa di simile in bash:
#!/bin/bash
jhome () {
export JAVA_HOME=`/usr/libexec/java_home $@`
echo "JAVA_HOME:" $JAVA_HOME
echo "java -version:"
java -version
}
Quindi per passare da un java all'altro:
$> 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)
posto della seconda riga della tua jhome
funzione.
È un po 'complicato, ma prova a seguire i passaggi descritti in Installazione di Java su OS X 10.9 (Mavericks) . Fondamentalmente, dovrai aggiornare il tuo alias a java
.
Passo dopo passo:
Dopo aver installato JDK 1.7, dovrai fare ciò sudo ln -snf
per cambiare il link in corrente java
. Per fare ciò, aprire Terminale ed emettere il comando:
sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Si noti che la directory jdk1.7.0_51.jdk
potrebbe cambiare in base alla versione dell'SDK installata.
Ora, è necessario impostare il JAVA_HOME
punto in cui è jdk_1.7.0_xx.jdk
stato installato. Apri di nuovo il Terminale e digita:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
Puoi aggiungere la export JAVA_HOME
riga sopra nel tuo .bashrc
file per avere java permanentemente nel tuo Terminale
JAVA_HOME
verrà esportata nella sessione Terminale corrente. Puoi aggiungerlo al nostro .bashrc
se vuoi. Adatterò i comandi all'ultima versione.
Utilizzare jenv è un modo semplice.
1.Installare jenv
curl -s get.jenv.io | bash
2.Config jenv
cd ~ / .jenv / candidate / mkdir java cd java mkdir 1.7 mkdir 1.8
3.Collega il percorso jdk
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / candidate / java / 1.7 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / candidate / java / 1.8
4. Siete pronti
comando switch:
jenv usa java 1.8
imposta default:
jenv default java 1.7
installa JDK, non solo JRE
/usr/libexec/java_home -v 1.8
dà
/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
Il prossimo
touch .bash_profile
open -a TextEdit.app .bash_profile
TextEdit ti mostrerà una pagina vuota che puoi compilare.
aggiungi al documento:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
nel terminal:
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
prova il comando:
javac -version
dovrebbe produrre:
javac 1.8.0_111
tl; dr
Aggiungi la riga:
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'
al file
~/.bash_profile
(sostituisci jdk1.8.0_144.jdk con la versione scaricata)
poi source ~/.bash_profile
Usa jenv, è come un gestore di ambiente Java. È super facile da usare e da pulire
Per Mac, seguire i passaggi:
brew install jenv
git clone https://github.com/gcuisinier/jenv.git ~/.jenv
Installazione: se stai usando bash segui questi passaggi:
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
Aggiungi le versioni desiderate di JVM a 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
Controlla le versioni installate:
jenv versions
Impostare la versione Java che si desidera utilizzare da:
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
}
mettere questo nel vostro ~ / .profile e utilizzarlo nel vostro terminale in questo modo setjdk 1.8
, setjdk 1.7
, setjdk 9
etc etc ...
Se non lo hai, removeFromPath
allora è:
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
Quattro semplici passaggi utilizzando il terminale per le persone che utilizzano il processo predefinito .. :)
echo $JAVA_HOME
ti dà java corrente a casa. Ad esempio:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/
cd /Library/Java/JavaVirtualMachines/
ti porterà nella cartella in cui normalmente installi jdks (potrebbe essere diverso per i tuoi computer)
ls
mostra le cartelle disponibili (normalmente avrà i numeri di versione, ad esempio jdk1.8.0_191.jdk openjdk-11.0.2.jdk
:)export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home'
cambierà la casa java ..macOS El Capitan o versioni successive sceglieranno la versione superiore del JDK disponibile in /Library/Java/JavaVirtualMachines
, quindi per effettuare il downgrade è possibile rinominare il file Info.plist
in qualcos'altro in Info.plist.disabled
modo tale che il sistema operativo sceglierà una versione precedente.
Dalla pagina man ufficiale di java_home (1) di Apple :
**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`
Se ancora non riesci a impostarlo. usando questo comando.
export JAVA_HOME =/usr/libexec/java_home -v 1.8
allora devi usare questo.
export JAVA_HOME =$(/usr/libexec/java_home -v 1.8)
funzionerà sicuramente.
Per prima cosa scopri dove memorizzi le variabili d'ambiente-
Passaggi per impostare la variabile d'ambiente: -
Ora imposta le variabili d'ambiente nel tuo file
un. Per emacs.profile puoi usare questo link O vedi lo screenshot qui sotto
b. Per la configurazione del profilo 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)
Tutto pronto Ora puoi facilmente aggiornare o degradare la versione JAVA.
Ho adattato la risposta da @Alex sopra e ho scritto quanto segue per correggere il codice per 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)
Puoi aggiungerlo al tuo .bash_profile per avere la versione impostata di default.
//Open bash profile
open ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profile
source ~/.bash_profile
Se stai usando il pesce e stai usando il mac e vuoi essere in grado di passare da un JDK all'altro, di seguito funziona per me sul mac.
La risposta di @ kenglxn non ha funzionato per me e ho capito che bcos non ha impostato -g che è globale!
Metti sotto in ~ / .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
Per sapere quale versione / versione secondaria hai installato, puoi fare:
/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
Se hai più versioni e vuoi eseguire qualcosa utilizzando una versione specifica, usa questo esempio:
/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
Sulla base della risposta di @markhellewell ho creato un paio di funzioni alias che lo faranno per te. Basta aggiungerli al file di avvio della shell
#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
Ecco come lo faccio sul mio Linux (Ubuntu / Mint Mate) , immagino che Mac possa farlo in modo simile.
passi:
/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
è il soft link.JAVA_HOME
in uno script iniziale. /etc/profile.d/eric.sh
, o semplicemente usare ~/.bashrc
. JAVA_HOME=/mnt/star/program/java/java
java -version
dovrebbe stampare la versione java./mnt/star/program/java/jdk-11
~/.bashrc
, definire la variabile per varie versioni di 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
, definire il comando per cambiare la versione di 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
per rendere effettive le modifiche.comandi:
jv11
jv8
jvd
_E_JAVA_HOME_D
definizione sopra.jv
Esempio di output:
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
.Sul mio computer quando installo jdk a mano, mantengo la versione minore, quindi creo un collegamento soft con la versione principale ma senza la versione secondaria.
ad es.
// questa è la directory effettiva,
jdk1.8.0_191
// questo è un soft link a jdk1.8.0_191
jdk-8
// questo è un collegamento soft a jdk-8
ojdk-11
java
Definisco l'alias di comando in ~/.bashrc
, ma definisco la variabile in un file separato.
Sto usando ~/.eric_var
per definire le variabili e ~/.bashrc
le fornirò (ad es source $HOME/.eric_var
.).
Un modo semplice per includere un JDK installato separatamente nell'elenco fornito da /usr/libexec/java_home -V
è il collegamento simbolico alla directory come segue:
sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
Ad esempio, per registrare il JDK incluso con Android Studio (1.8.0_152 al momento della scrittura), utilizzare:
sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
Ora java_home
elencherò il JDK sotto Matching Java Virtual Machines
e puoi selezionarlo come descritto sopra.
L'ho fatto per il terminale locale con
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
Questo strumento farà il lavoro per te:
http://www.guigarage.com/2013/02/change-java-version-on-mac-os/
È un semplice JavaOne che può essere utilizzato per definire l'attuale versione di Java. La versione può essere utilizzata in una shell aperta dopo che una versione è stata selezionata nello strumento.
SOLUZIONE TROPPO FACILE: Che mal di testa - questa è stata una soluzione rapida e semplice che ha funzionato per me.
Mac OS Sierra versione 10.12.13
Utilizzare i tasti di scelta rapida: CMD + MAIUSC + G - digitare "/ Libreria /"
Trova la cartella JAVA
Cartella Java clic destro = Sposta nel cestino (password obbligatoria)
Installa: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Scarica Javascript SDK
/usr/libexec/java_home
ti dice l' esecuzione ?