Dove si trova JAVA_HOME su macOS Mojave (10.14) su Lion (10.7)?


559

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 .



Su Mac Sierra ho / Library / Java / JavaVirtualMachines che ha jdk e Preferenze di Sistema> Java cosa c'è di diverso tra questi 2?
vikramvi,

domanda diversa, grazie
Olivier Refalo,

Non sottovalutare le possibilità che l'installazione Java non sia stata completata correttamente. Se nessuno dei seguenti eccellenti suggerimenti sembra funzionare, prova a [reinstallare]!
MarkHu,

Risposte:


1059

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 .


1
Buono a sapersi. Devo dire che non sono troppo elettrizzato con l'elenco delle funzionalità di Lion. Sembra che non ci sia molto in termini di miglioramenti per il mio uso ...
prodigitalson

1
@Oliver: ewww :-) Questa è probabilmente la cosa meno utile ... ho sempre più finestre aperte e disposte sullo schermo in modo da poter vedere più cose contemporaneamente ... di solito un layout diverso su ogni spazio.
prodigitalson

11
questo non ha funzionato per me. /System/Library/Frameworks/JavaVM.framework/Home ha funzionato.
chaostheory,

7
Funziona anche su Maverick!
cbare,

3
Per Java 11 e High Sierra, esporta JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z,

112

/usr/libexec/java_homenon è 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_homeinsiste 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.


blog.hgomez.net/2012/07 è rotto ma è stato risolto nella risposta che ora collega a web.archive.org/web/20140813164713/http://blog.hgomez.net/blog/…
Matt C

export JAVA_HOME = "/ usr / libexec / java_home -v 1.8"
Leo Nguyen

83

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.


1
Avrebbe funzionato se avessi installato Java 6 da Apple. il punto qui è che stai usando l'oracolo java 7.
Olivier Refalo il

2
Questo funziona molto bene su Mavricks, ma la posizione dello script java_home è diversa. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost,

1
Ho provato a configurare Maven su Mac Yosemite, in questo modo per impostare JAVA_HOME funziona per me.
Alocus,

Funziona per me su Sierra 10.12 e Java 8
Kanak Sony,

41

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


Penso di aver ottenuto il tuo pb - usi le virgolette invece dei backquotes 'vs `
Olivier Refalo

No, sto usando le virgolette giuste, invece ho provato a copiare e incollare, non ha funzionato. Ho aggiornato la mia risposta perché ha funzionato per me.
Giri,

@OlivierRefalo Vedo che hai aggiornato la tua risposta con virgolette doppie ("). Ma anche senza virgolette, funziona.
Giri

Molte grazie . Ha funzionato per me in Yosemite 10.10
Vijay

2
Questa è l'unica soluzione che funziona davvero. Aggiungendo il percorso con qualsiasi altra soluzione, verrà aggiunto su base temporanea, fino a quando non si termina il terminale e il percorso scompare. Per essere aggiunto in modo permanente, il percorso deve essere salvato nel file .bash_profile. Nel frattempo, ho usato nano piuttosto che vim, per semplicità.
Nadeem Jamali,

31

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 è 9e 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'

29

Quanto sopra non ha funzionato per me con gli strumenti EC2 di Amazon, perché si aspetta bin/javaecc JAVA_HOME. Sotto . /System/Library/Frameworks/JavaVM.framework/Homeha funzionato.


Era leone? hai ricevuto il pacchetto Java ufficiale da Apple o Java6 / 7 da Oracle?
Olivier Refalo,

Credo che fosse il pacchetto Java di Apple.
Cawflands,

1
@AndrewH sì, ho trovato lo stesso per essere vero. Ha installato il pacchetto Java di Apple e ha scoperto il percorso effettivo della libreria (ad esempio, per impostare -vm in eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub

Grazie per le informazioni. Forse sono troppo semplice, ma perché OS X rende una cosa così semplice un casino completo?
Kuberchaun,

18

Per OS X puoi fare:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`

Da notare, HFS + non distingue tra maiuscole e minuscole.
sufinawaz,

14

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

1
Non ricevo la tua proposta: in cosa differisce dall'esportazione JAVA_HOME = /usr/libexec/java_home ? il comando / usr / libexec / java_home restituisce /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo

Per rese di visualgc / usr / libexec / java_home: java.exe trovato in: / usr / libexec / java_home non si trova in una directory JDK. Impostare ed esportare la variabile di ambiente JVMSTAT_JAVA_HOME per fare riferimento a una directory contenente il JDK Sun J2SE 1.5.0 (non un JRE) e riprovare.
EGHM,

13

Quanto segue ha funzionato per me. Sto usando ZSH su OSX Yosemite con Java 8 installato.

Il seguente comando /usr/libexec/java_homeemette 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"

In che modo differisce dalla soluzione proposta?
Olivier Refalo,

Non è diverso dalla soluzione proposta. Questa soluzione è specifica per le persone che utilizzano ZSH, Java 8 e OSX Yosemite.
Hemanta,

Confermato che funziona come un incantesimo con Java 1.8 installato su OSX Yosemite, applausi amico.
Ashoor,

La soluzione generale funziona perfettamente per Java 8, zsh e Yosemite.
yaauie,

10

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 è binsotto Home


1
in qualche modo in disaccordo con quella frase "più aggiornabile" / usr / libexec / java_home è un exe che restituisce un percorso, non un percorso fisso. Inoltre, a seconda della versione jvm utilizzata, il percorso sopra indicato non corrisponderà
Olivier Refalo,

10

JVM Oracle più recenti come 1.7.0_21-b12 sembrano installare qui:

/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home


1
Infatti - e lo /usr/libexec/java_homestrumento restituisce un errore per queste versioni di Java.
Joe Dyndale,

1
Questa è l'unica risposta che funziona per me dopo aver scaricato v1.7 JRE
maxrossello,

2
Questo è il percorso se si installa JRE. La maggior parte delle risposte e dei commenti classificati riguarda il JDK. Non è la stessa cosa
Nessuno 1

9

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)

1
Funziona su Catalina. Ty
TuGordoBello

5

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


@AdonisSMU hai trovato una soluzione?
Luccas,

3

Ho dovuto impostarlo esplicitamente sul percorso esatto sul mio MacBook Air.

Passaggi seguiti:

  1. prova a echo $JAVA_HOME(se impostato mostrerà il percorso), in caso contrario, prova a cercarlo usandosudo find /usr/ -name *jdk
  2. Modifica il Bash p con - sudo nano ~/.bash_profile
  3. Aggiungi il percorso esatto a JAVA Home (con il percorso dal passaggio 2 sopra) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Salva ed esci
  5. Controlla JAVA_Home utilizzando - echo $JAVA_HOME

Sto eseguendo MACOS MOJAVE - 10.14.2 (18C54) su un Macbook Air con JAVA 8


2

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


1
Su una nuova installazione Mavericks, questa è l'unica soluzione che ha funzionato per me. Ho dovuto indicare sqldeveloper alla casa jdk che si trova qui (come suggerito da questa discussione per farlo funzionare.
chris

2

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"


1

Ho avuto lo stesso problema dopo aver aggiornato il mio Mac OS e aver funzionato come segue:

  1. cmd> vi ~ / .bash_profile

  2. Aggiungi / aggiorna la riga per JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Sommario / Home"

  3. 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 /


1

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.


1

Per Java 11 (JDK 11) può essere localizzato con il seguente comando:

/usr/libexec/java_home -v 11

0

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 javaresi/usr/bin/java .

Quindi, ho impostato JAVA_HOME=/usrnel mio.bashrc .

Apparentemente, /usr/bin/javaè un collegamento simbolico a /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javacui fa funzionare tutto.

Aggiornare

Come menzionato nel commento di seguito, questo JAVA_HOMEvalore non è la soluzione ideale quando la JAVA_HOMEvariabile 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.


il punto è / usr non è una directory JAVA_HOME corretta. Va bene individuare bin / java. Ma a volte i costruttori (ant, make) usano JAVA_HOME per fare riferimento al compilatore javac in lib / tools.jar La tua soluzione fallirà per quelli
Olivier Refalo,

Ah, grazie per l'informazione. Hai ragione. Aggiornerà la risposta.
Anjan,

0

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

Potete aggiungere ulteriori informazioni per rendere utile questa risposta.
Mika,

0

Chiunque utilizzi AUSKEY dall'Australian Tax Office (ATO) dovrebbe disinstallare AUSKEY. Questo risolto i miei problemi con JAVA_HOME.

Inoltre, non è più necessario per gli utenti MAC. Yah!


0

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)

0

Basta impostare java_home della versione 1.8 jdk nel netbeans.conffile:

/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


0

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

-1

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

rif: http://qiita.com/seri_k/items/e978c1339ce51f13e297

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.