Cosa devo impostare la variabile d'ambiente JAVA_HOME su macOS X 10.6?


436

Molte applicazioni Java che utilizzano script di shell per configurare il proprio ambiente utilizzano la JAVA_HOMEvariabile di ambiente per avviare la versione corretta di Java, individuare i JAR JRE e così via.

In macOS X 10.6, i seguenti percorsi sembrano essere validi per questa variabile

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

Alcuni di questi sono collegamenti simbolici all'attuale VM corrente (come definito nel riquadro Preferenze Java).

Ma quale dovrebbe essere usato - o va bene usarne uno?


Risposte:


849

Ho appena impostato JAVA_HOMEl'output di quel comando, che dovrebbe darti il ​​percorso Java specificato nelle tue preferenze Java. Ecco uno snippet dal mio .bashrcfile, che imposta questa variabile:

export JAVA_HOME=$(/usr/libexec/java_home)

Non ho riscontrato problemi con questa tecnica.

Occasionalmente devo cambiare il valore di JAVA_HOMEuna versione precedente di Java. Ad esempio, un programma che sto mantenendo richiede Java 5 a 32 bit su OS X, quindi quando utilizzo quel programma, ho impostato JAVA_HOMEeseguendo:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

Per quelli di voi che non hanno java_homesul tuo cammino aggiungilo in questo modo.

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

Riferimenti :


20
Mountain Lion ha troppo
sghill

57
Ancora valido per Mavericks
Pascal il

42
Ancora valido per Yosemite. ;)
Geoffrey Wiseman,

42
Il capitano. Dai un'occhiata!
gattshjoty,

11
Ancora valido per Mojave
Keuha il

40

Inoltre, è interessante impostare il PERCORSO in modo che rifletta il JDK. Dopo aver aggiunto JAVA_HOME (che può essere fatto con l'esempio citato da 'mipadi'):

export JAVA_HOME=$(/usr/libexec/java_home)

Aggiungi anche in ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PS: Per OSX, generalmente utilizzo .profile nella directory HOME anziché .bashrc


Per OSX che esegue bash predefinito, generalmente utilizzo bash .bash_profile: perché lo usi rispetto al generico .profile?
LeeGee,

1
Poiché .profileè generico, funzionerà con sho bash, mentre .bash_profileè esclusivo bash. Anche questo isola le impostazioni dalle app che usano .bash_profile, come MacPorts. Ma puoi tranquillamente usare uno dei due. Vedi di più qui
lucasarruda,

1
- Cordiali saluti, il link che hai fornito conferma il mio sospetto che sotto bash (cioè di default), l'uso di .bash_profile override .profile.
LeeGee,

@LeeGee sì, e lo fa perché .bash_profileè specifico, mentre .profileè generico, per tutte le shvarianti.
lucasarruda,

1
Poiché OS / X inserisce un collegamento a java nel tuo, /usr/binnon dovrebbe esserci la necessità di aggiungere esplicitamente $JAVA_HOMEal tuo percorso.
Zac,

20

Sto avendo MAC OS X (Sierra) 10.12.2 .

Ho impostato JAVA_HOME per funzionare su React Native (per app Android) seguendo i seguenti passaggi.

  • Apri Terminale (Comando + R, digita Terminale, premi INVIO).

  • Aggiungi le seguenti righe a ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Ora esegui il seguente comando. source ~/.bash_profile

  • Puoi verificare il valore esatto di JAVA_HOME digitando il comando seguente. echo $JAVA_HOME

Il valore (output) restituito sarà simile al seguente. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Questo è tutto.


Questo è utile, grazie. Ma credo che ti sia perso includendo l'ultimo passaggio, che sta quindi impostando JAVA_HOME sul valore restituito in .bashrc / .bash_profile / .zshrc / ecc. Correggimi se sbaglio.
TheProletariat

2
Non è richiesto Nel mio caso, si $JAVA_HOMEriferisce $(/usr/libexec/java_home)e $(/usr/libexec/java_home) viene internamente definito /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homedal Sistema.
Gabbiano

1
Fatto. Era richiesto nel mio caso. Grazie.
TheProletariat

14

Sono su Mac OS 10.6.8

La soluzione più semplice funziona per me è semplicemente inserita

$ export JAVA_HOME=$(/usr/libexec/java_home)

Per verificare se funziona, inserisci

$ echo $JAVA_HOME

mostra

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

puoi anche testare

$ which java


9

Tendo a usare /Library/Java/Home. Il modo in cui funziona il riquadro delle preferenze dovrebbe essere aggiornato con la tua versione preferita.


/bidone . e controlla che punti a / Library / java e non / System / Library / .. in quanto quello potrebbe essere obsoleto.
JRun,

1
Questo non è più preciso. Su OS X 10.5 e versioni successive, utilizzare / usr / libexec / java_home per trovare il percorso.
Kristopher Johnson,

8

Quello sopra non funziona più in YOSEMITE per APPLICAZIONI GRAFICHE! Come eclissi, o tutto è iniziato con Spotlight. (.bash_profile, launchd.conf funziona solo per le sessioni del terminale.) Prima di avviare eclipse, basta aprire una finestra del terminale ed eseguire il comando seguente:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(Con il tuo percorso di installazione! Forse funziona con $ (/ usr / libexec / java_home) invece che con il percorso completo.)

Leggi l'intero eccellente articolo sulla soluzione permanente qui: L' impostazione delle variabili di ambiente tramite launchd.conf non funziona più in OS X Yosemite / El Capitan / macOS Sierra?


2

Ho trovato questo stack per aiutare, stavo avendo lo stesso problema e ho potuto risolvere:

Il mio percorso java era qui:

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

ed è stato necessario inserire nel mio .bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

Spero d'aiuto


2

Salto della configurazione del Terminale da quando hai citato le applicazioni, impostazione della variabile di ambiente di sistema permanente (funziona per macOS Sierra; dovrebbe funzionare anche per El Capitan):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(questo imposterà JAVA_HOME sull'ultimo 1.8 JDK, è probabile che tu abbia passato aggiornamenti serverali come javac 1.8.0_101, javac 1.8.0_131)
Naturalmente, cambia da 1.8 a 1.7 o 1.6 (davvero?) per soddisfare le tue esigenze e il tuo sistema


1

Come notano altre risposte, utilizzare il modo corretto di trovare la home directory Java /usr/libexec/java_home.

La documentazione ufficiale per questo è nel Q&A tecnico di Apple QA1170: importanti directory Java su OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html


Questo è un duplicato!
Franklin Yu,

Penso che l'inclusione del collegamento alla documentazione ufficiale di Apple non lo ridondante. Ma se lo è, l'azione corretta è contrassegnarla come duplicata, non fare un commento.
Kristopher Johnson,

Ho fatto un commento perché non posso contrassegnare una risposta come duplicata. Stack Overflow consente solo all'utente di contrassegnare una domanda come duplicata (purtroppo). Il collegamento è utile, ma penso che un commento alla risposta corrente (o semplicemente modificarlo con il collegamento poiché hai già la possibilità) sarebbe meglio poiché concentra tutte le informazioni utili in una singola risposta. Credo che ci sia stata una linea guida da qualche parte che Stack Overflow preferisce fissare le risposte correnti piuttosto che scriverne una nuova.
Franklin Yu,

1

Per me Maven sembra funzionare dal .mavenrcfile:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

Sono sicuro di averlo raccolto anche su SO, ma non ricordo dove.


1

Crea file ~/.mavenrc

quindi incollalo nel file

export JAVA_HOME=$(/usr/libexec/java_home)

test

mvn -v


Mi piace questo approccio, perché mi permette di cambiare molto facilmente la versione Java all'interno del file .mavenrc.
Spindizzy,

1

Si consiglia di controllare la shell terminale predefinita prima di impostare la variabile d'ambiente JAVA_HOME , tramite i seguenti comandi:

$ echo $SHELL
/bin/bash

Se il tuo terminale predefinito è / bin / bash (Bash), allora dovresti usare @hygull metodo

Se il tuo terminale predefinito è / bin / zsh (Z Shell), allora dovresti impostare queste variabili d'ambiente nel file ~ / .zshenv con i seguenti contenuti:

export JAVA_HOME="$(/usr/libexec/java_home)"

Allo stesso modo, qualsiasi altro tipo di terminale non menzionato sopra, è necessario impostare la variabile di ambiente nel rispettivo file env del terminale.

Questo metodo ha funzionato con macOS Mojave versione 10.14.6 .


-1

Per gli utenti di Fish Shell, utilizzare qualcosa di simile al seguente: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

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.