Java è un pacchetto opzionale sulle ultime versioni di macOS.
Tuttavia, una volta installato, sembra che la variabile d'ambiente JAVA_HOME non sia impostata correttamente .
Java è un pacchetto opzionale sulle ultime versioni di macOS.
Tuttavia, una volta installato, sembra che la variabile d'ambiente JAVA_HOME non sia impostata correttamente .
Risposte:
Con il pacchetto opzionale Java o Oracle JDK installato, l'aggiunta di una delle seguenti righe al file ~ / .bash_profile imposterà la variabile di ambiente di conseguenza.
export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
Aggiornamento: aggiunto -v flag basato sulla risposta di Jilles van Gurp .
/usr/libexec/java_home
non è una directory ma un eseguibile. Emette il JAVA_HOME attualmente configurato e in realtà non lo modifica. Ecco a cosa serve l'app Preferenze Java, che nel mio caso sembra rotta e in realtà non cambia correttamente la JVM. Elenca la JVM 1.7 ma posso attivare / disattivare e trascinare e rilasciare tutto ciò che voglio lì senza cambiare effettivamente l'output di /usr/libexec/java_home
.
Anche dopo aver installato 1.7.0 u6 da Oracle su Lion e averlo impostato come predefinito nelle preferenze, ha comunque restituito la Apple 1.6 java a casa. L'unica correzione che funziona davvero per me è impostare manualmente JAVA_HOME:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/
Almeno in questo modo quando eseguito dalla riga di comando utilizzerà 1.7. /usr/libexec/java_home
insiste ancora su 1.6.
Aggiornamento : capire Java dalla riga di comando su OSX ha una spiegazione migliore su come funziona.
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
è il modo di farlo. Nota, l'aggiornamento a 1.8 funziona bene.
Per me, Mountain Lion 10.8.2, la soluzione più votata non funziona. Ho installato jdk 1.7 tramite Oracle e maven da homebrew.
La mia soluzione è dal file hadoop-env.sh di hadoop che ho installato anche da homebrew. Aggiungo la seguente frase in ~ / .bash_profile e funziona.
export JAVA_HOME="$(/usr/libexec/java_home)"
Questa soluzione funziona anche con OS X Yosemite con Java 1.8 installato da Oracle.
export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Nessuna delle risposte sopra mi ha aiutato. Suppongo che tutte le risposte siano per anzianiOS X
Per OS X Yosemite 10.10, attenersi alla seguente procedura
Usa il tuo editor di testo preferito per aprire: ~/.bash_profile
//This command will open the file using vim
$ vim ~/.bash_profile
Aggiungi la seguente riga nel file e salvala (: seguita da "x" per vim):
export JAVA_HOME=$(/usr/libexec/java_home)
Quindi nel terminale digitare i seguenti due comandi per vedere l'output:
$ source ~/.bash_profile
$ echo $JAVA_HOME
Nella seconda riga, stai aggiornando il contenuto del .bash_profile
file.
Aggiornamento per Java 9 e alcuni alias accurati.
In .bash_profile
:
export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`
Si noti che per l'ultima versione lo è 9
e non 1.9
.
Imposta Java attivo:
export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH
Alcuni alias aggiuntivi per passare da una versione all'altra:
alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'
Test nel terminale:
% j8
% java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
% j9
% java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
EDIT: aggiornamento per Java 10
export JAVA_HOME10=`/usr/libexec/java_home --version 10`
alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'
EDIT: aggiornamento per Java 11
export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
Quanto sopra non ha funzionato per me con gli strumenti EC2 di Amazon, perché si aspetta bin/java
ecc JAVA_HOME
. Sotto . /System/Library/Frameworks/JavaVM.framework/Home
ha funzionato.
Per OS X puoi fare:
export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
Su Mac OS X Lion, per impostare visualgc per l'esecuzione, ho usato:
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
/usr/libexec/java_home
? il comando / usr / libexec / java_home restituisce /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Quanto segue ha funzionato per me. Sto usando ZSH su OSX Yosemite con Java 8 installato.
Il seguente comando /usr/libexec/java_home
emette il percorso della home JDK:
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
Nel tuo ~/.zshrc
,
export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
Un modo migliore (più aggiornabile) è utilizzare quanto segue:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
Questo dovrebbe funzionare con AWS anche dal momento che è bin
sotto Home
JVM Oracle più recenti come 1.7.0_21-b12 sembrano installare qui:
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
/usr/libexec/java_home
strumento restituisce un errore per queste versioni di Java.
per macOS Mojave 10.14.1 e JAVA 11.0.1 ho impostato il profilo come
export JAVA_HOME=$(/usr/libexec/java_home)
digitare questo terminale per confermare:
$JAVA_HOME/bin/java -version
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)
Il mio approccio è:
.bashrc
export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
export JAVA_HOME=$JAVA6_HOME
# -- optional
# export PATH=$JAVA_HOME/bin:$PATH
Ciò rende molto semplice il passaggio tra J6 e J7
Ho dovuto impostarlo esplicitamente sul percorso esatto sul mio MacBook Air.
Passaggi seguiti:
echo $JAVA_HOME
(se impostato mostrerà il percorso), in caso contrario, prova a cercarlo usandosudo find /usr/ -name *jdk
sudo nano ~/.bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
echo $JAVA_HOME
Sto eseguendo MACOS MOJAVE - 10.14.2 (18C54) su un Macbook Air con JAVA 8
Per Mac OS X 10.9 ho installato l'ultima versione di JRE da Oracle e quindi ripristinato JAVA_HOME su /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.
Sono sicuro che c'è un modo migliore, ma mi ha messo in funzione.
hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
OSX Yosemite, ZSH e Java SE Runtime Environment 8, dovevo:
$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin
e in ~ / .zshrc cambiare JAVA_HOME in
export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"
Ho avuto lo stesso problema dopo aver aggiornato il mio Mac OS e aver funzionato come segue:
cmd> vi ~ / .bash_profile
Aggiungi / aggiorna la riga per JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Sommario / Home"
cmd> source ~ / .bash_profile o apre un nuovo terminale
Penso che la versione di jdk potrebbe essere diversa, quindi basta usare la versione che hai in / Library / Java / JavaVirtualMachines /
Se hai bisogno di avere più versioni di JDK su Mac OS X (Yosemite), potrebbe essere utile aggiungere alcuni script per il passaggio automatico tra di loro.
Quello che fai è modificare il tuo ~ / .bash_profile e aggiungere quanto segue:
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
}
function removeFromPath() {
export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}
setjdk 1.7
Quello che fa lo script è rimuovere prima le altre versioni JDK nel PERCORSO in modo che non interferiscano con la nostra nuova versione JDK. Quindi fa un uso intelligente di / usr / libexec / java_home che è un comando che elenca le versioni JDK installate. L' argomento -v dice a java_home di restituire il percorso di JDK con la versione fornita, ad esempio 1.7. Aggiorniamo anche il PERCORSO in modo che punti alla directory bin della directory JAVA_HOME appena trovata . Alla fine possiamo semplicemente eseguire la funzione usando
setjdk 1.7
che seleziona l'ultima versione JDK installata del ramo 1.7. Per selezionare una versione specifica puoi semplicemente eseguire
setjdk 1.7.0_51
anziché. Esegui / usr / libexec / java_home -V per ottenere maggiori dettagli su come scegliere le versioni.
PS Non dimenticare di eseguire il source ~ / .bash_profile dopo averlo salvato.
Questa risposta è legata a Mountain Lion e non a Lion. Ho dovuto farlo per gli strumenti della riga di comando di AWS. Secondo i documenti AWS , l'esecuzione dei which java
resi/usr/bin/java
.
Quindi, ho impostato JAVA_HOME=/usr
nel mio.bashrc
.
Apparentemente, /usr/bin/java
è un collegamento simbolico a /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
cui fa funzionare tutto.
Aggiornare
Come menzionato nel commento di seguito, questo JAVA_HOME
valore non è la soluzione ideale quando la JAVA_HOME
variabile di ambiente deve essere utilizzata da cose diverse dagli strumenti della riga di comando di AWS. Funziona bene con gli strumenti della riga di comando di AWS, tuttavia, come indicato nei loro documenti.
Per Mac Yosemite,
JDK 1.7.0_xx sta usando
$ ls -ltar /usr/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home
Sto usando Fish shell su High Sierra 10.13.4 e installato Java tramite Brew.
Non è impostato automaticamente, quindi per impostarlo correttamente sul mio sistema che eseguo:
set -U JAVA_HOME (/usr/libexec/java_home)
Basta impostare java_home della versione 1.8 jdk nel netbeans.conf
file:
/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf
riga di commento:
netbeans_jdkhome="path/to/jdk"
e imposta il percorso del tuo 1.8 jdk, nel mio caso:
netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"
Questo approccio prevede di avere diverse versioni jdk su mac os
Per gli utenti del terminale Fish su Mac (credo che sia disponibile anche su Linux), questo dovrebbe funzionare:
set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
set -Ux JAVA_HOME $JAVA_8 //or whichever version you want as default
per utente mac. java 8 dovrebbe aggiungere
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
# JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
java 6:
export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
# JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home