Où est JAVA_HOME sur macOS Mojave (10.14) vers Lion (10.7)?

559

Java est un package facultatif sur les dernières versions de macOS.

Pourtant, une fois installé, il semble que la variable d'environnement JAVA_HOME ne soit pas définie correctement .

Olivier Refalo
la source
1
Duplication possible de Que dois-je définir JAVA_HOME sur OSX
mipadi
Sur Mac Sierra, j'ai / Library / Java / JavaVirtualMachines qui a jdk et Préférences Système> Java ce qui est différent entre ces 2?
vikramvi
question différente, merci
Olivier Refalo
Ne sous-estimez pas les chances que votre installation Java ne se soit pas terminée correctement. Si aucune des excellentes suggestions ci-dessous ne semble fonctionner, essayez de [ré] installer!
MarkHu

Réponses:

1059

Avec le package optionnel Java ou Oracle JDK installé, l'ajout d'une des lignes suivantes à votre fichier ~ / .bash_profile définira la variable d'environnement en conséquence.

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)"

Mise à jour: ajout -v drapeau basé sur Jilles van Gurp réponse .

Olivier Refalo
la source
1
Bon à savoir. Je dois dire que je ne suis pas trop ravi de la liste des fonctionnalités de Lion. Il ne semble pas y avoir grand-chose d'améliorations pour mon utilisation ...
prodigitalson
1
@Oliver: ewww :-) C'est probablement la chose la moins utile ... j'ai toujours plusieurs fenêtres ouvertes et disposées à l'écran pour que je puisse voir plusieurs choses à la fois ... généralement une disposition différente sur chaque espace.
prodigitals le
11
cela n'a pas fonctionné pour moi. /System/Library/Frameworks/JavaVM.framework/Home a fonctionné.
chaostheory
7
Fonctionne également sur Maverick!
cbare
3
Pour Java 11 et High Sierra, exportez JAVA_HOME = "$ (/ usr / libexec / java_home -v 11)"
Willie Z
112

/usr/libexec/java_homen'est pas un répertoire mais un exécutable. Il génère le JAVA_HOME actuellement configuré et ne le modifie pas réellement. C'est à cela que sert l'application Java Preferences, qui dans mon cas semble cassée et ne change pas réellement la JVM correctement. Il répertorie la JVM 1.7, mais je peux basculer / désélectionner et faire glisser et déposer tout ce que je veux sans changer réellement la sortie de /usr/libexec/java_home.

Même après avoir installé 1.7.0 u6 à partir d'Oracle sur Lion et l'avoir défini comme valeur par défaut dans les préférences, il a toujours renvoyé la maison java apple 1.6. Le seul correctif qui fonctionne réellement pour moi consiste à définir JAVA_HOME manuellement:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_06.jdk/Contents/Home/

Au moins de cette façon, lorsqu'il sera exécuté à partir de la ligne de commande, il utilisera 1.7. /usr/libexec/java_homeinsiste toujours sur 1.6.

Mise à jour : Comprendre Java à partir de la ligne de commande sur OSX a une meilleure explication sur la façon dont cela fonctionne.

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

est la façon de le faire. Notez que la mise à jour vers 1.8 fonctionne très bien.

Jilles van Gurp
la source
blog.hgomez.net/2012/07 est cassé mais il est corrigé dans la réponse qui relie maintenant à 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

Pour moi, Mountain Lion 10.8.2, la solution la plus votée ne fonctionne pas. J'ai installé jdk 1.7 via Oracle et maven de homebrew.

Ma solution provient du fichier hadoop-env.sh de hadoop que j'ai également installé depuis homebrew. J'ajoute la phrase ci-dessous dans ~ / .bash_profile, et cela fonctionne.

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

Cette solution fonctionne également pour OS X Yosemite avec Java 1.8 installé à partir d'Oracle.

onpduo
la source
1
Cela aurait fonctionné si vous aviez installé java 6 d'Apple. le point ici est que vous utilisez oracle java 7.
Olivier Refalo
2
Cela fonctionne très bien pour moi sur Mavricks mais l'emplacement du script java_home est différent. export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
Christopher Frost
1
J'ai essayé de configurer maven sur mac Yosemite, de cette façon pour que JAVA_HOME fonctionne pour moi.
Alocus
Fonctionne pour moi sur Sierra 10.12 et Java 8
Kanak Sony
41

Aucune des réponses ci-dessus ne m'a aidé. Je suppose que toutes les réponses sont pour les plus âgésOS X

Pour OS X Yosemite 10.10, procédez comme suit

Utilisez votre éditeur de texte préféré pour ouvrir: ~/.bash_profile

//This command will open the file using vim
$ vim ~/.bash_profile

Ajoutez la ligne suivante dans le fichier et enregistrez-la (: suivie de "x" pour vim):

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

Ensuite, dans le terminal, tapez les deux commandes suivantes pour voir la sortie:

$ source ~/.bash_profile

$ echo $JAVA_HOME

Dans la deuxième ligne, vous mettez à jour le contenu du .bash_profilefichier.

Giri
la source
Je pense avoir obtenu votre pb - vous utilisez des guillemets au lieu de backquotes 'vs `
Olivier Refalo
Non, j'utilise les bonnes citations, mais j'ai essayé de copier-coller, cela n'a pas fonctionné. J'ai mis à jour ma réponse car cela a fonctionné pour moi.
Giri
@OlivierRefalo Je peux voir que vous avez mis à jour votre réponse avec des guillemets doubles ("). Mais même sans guillemets, cela fonctionne.
Giri
Merci beaucoup . Cela a fonctionné pour moi dans Yosemite 10.10
Vijay
2
C'est la seule solution qui fonctionne vraiment. L'ajout de chemin par toute autre solution s'ajoutera temporairement jusqu'à ce que vous terminiez le terminal et que le chemin disparaisse. Pour être ajouté définitivement, le chemin doit être enregistré dans le fichier .bash_profile. Pendant ce temps, j'ai utilisé du nano plutôt que du vim, pour la simplicité.
Nadeem Jamali
31

Mise à jour pour Java 9 et quelques alias soignés.

Dans .bash_profile:

export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
export JAVA_HOME9=`/usr/libexec/java_home --version 9`

Notez que pour la dernière version, c'est le cas 9et non 1.9.

Définir Java actif:

export JAVA_HOME=$JAVA_HOME8
export PATH=$JAVA_HOME/bin:$PATH

Quelques alias supplémentaires pour basculer entre les différentes versions:

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 en terminal:

% 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: mise à jour pour 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: mise à jour pour Java 11

export JAVA_HOME11=`/usr/libexec/java_home --version 11`
alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
Peter Keller
la source
29

Ce qui précède n'a pas fonctionné pour moi avec les outils EC2 d'Amazon, car il attend bin/javaetc., en dessous JAVA_HOME. /System/Library/Frameworks/JavaVM.framework/Homea fonctionné.

Cawflands
la source
C'était un lion? avez-vous obtenu le package Java officiel d'Apple ou Java6 / 7 d'Oracle?
Olivier Refalo
Je pense que c'était le package Java d'Apple.
Cawflands
1
@AndrewH oui, j'ai trouvé la même chose vraie. Installation du package Java d'Apple et découverte du chemin d'accès à la bibliothèque (par exemple, pour définir -vm dans eclipse.ini): /System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
noogrub
Merci pour l'info. Je suis peut-être trop simple, mais pourquoi OS X fait-il d'une chose aussi simple un gâchis complet?
Kuberchaun
18

Pour OS X, vous pouvez faire:

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/commands/java_home`
sufinawaz
la source
Il est à noter que HFS + est insensible à la casse.
sufinawaz
14

Sur Mac OS X Lion, pour configurer l'exécution de visualgc, j'ai utilisé:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
EGHM
la source
1
Je ne reçois pas votre proposition: en quoi est-ce différent de l'exportation JAVA_HOME = /usr/libexec/java_home ? la commande / usr / libexec / java_home renvoie /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Olivier Refalo
Pour visualgc / usr / libexec / java_home: le fichier java.exe trouvé dans: / usr / libexec / java_home ne se trouve pas dans un répertoire JDK. Veuillez définir et exporter votre variable d'environnement JVMSTAT_JAVA_HOME pour faire référence à un répertoire contenant le JDK Sun J2SE 1.5.0 (pas un JRE) et réessayer.
EGHM
13

Ce qui suit a fonctionné pour moi. J'utilise ZSH sur OSX Yosemite avec Java 8 installé.

La commande suivante /usr/libexec/java_homeémet le chemin d'accès à l'accueil JDK:

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Dans votre ~/.zshrc,

export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
Hemanta
la source
En quoi est-ce différent de la solution proposée?
Olivier Refalo
Ce n'est pas différent de la solution proposée. Cette solution est spécifique aux personnes utilisant ZSH, Java 8 et OSX Yosemite.
Hemanta
Confirmé de fonctionner comme un charme avec java 1.8 installé sur OSX Yosemite, cheers mate.
Ashoor
La solution générale fonctionne très bien pour Java 8, zsh et Yosemite.
yaauie
10

Une meilleure façon (plus évolutive) consiste à utiliser ce qui suit:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

Cela devrait également fonctionner avec AWS car il se trouve binsous Home

czarcrab
la source
1
sorte de désaccord avec cette déclaration "plus évolutif" / usr / libexec / java_home est un exe qui retourne un chemin, pas un chemin fixe. En plus selon la version jvm que vous utilisez, le chemin ci-dessus ne correspondra pas
Olivier Refalo
10

Les machines virtuelles Java plus récentes telles que 1.7.0_21-b12 semblent s'installer ici:

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

Archie
la source
1
En effet - et l' /usr/libexec/java_homeoutil renvoie une erreur pour ces versions Java.
Joe Dyndale
1
C'est LA seule réponse qui fonctionne pour moi après avoir téléchargé v1.7 JRE
maxrossello
2
Il s'agit du chemin d'accès si vous installez le JRE. La plupart des réponses et commentaires notés concernent le JDK. Pas la même chose.
8None1
9

pour macOS Mojave 10.14.1 et JAVA 11.0.1 j'ai défini le profil comme

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

entrez le terminal pour confirmer:

$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)
Jiulong Zhao
la source
1
Fonctionne sur Catalina. Ty
TuGordoBello
5

Mon approche est:

.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

Cela permet de basculer très facilement entre J6 et J7

Mike Mitterer
la source
@AdonisSMU avez-vous trouvé une solution?
Luccas
3

J'ai dû le définir explicitement sur le chemin exact sur mon Macbook air.

Étapes suivies:

  1. essayez de le faire echo $JAVA_HOME(s'il est défini, il affichera le chemin), sinon, essayez de le rechercher en utilisantsudo find /usr/ -name *jdk
  2. Modifiez le Bash p avec - sudo nano ~/.bash_profile
  3. Ajoutez le chemin exact à JAVA Home (avec le chemin de l'étape 2 ci-dessus) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
  4. Sauvegarder et quitter
  5. Vérifiez JAVA_Home à l'aide de - echo $JAVA_HOME

J'utilise MACOS MOJAVE - 10.14.2 (18C54) sur un Macbook Air avec JAVA 8

Robin
la source
2

Pour Mac OS X 10.9, j'ai installé la dernière version de JRE d'Oracle, puis j'ai réinitialisé JAVA_HOME sur /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home.

Je suis sûr qu'il y a une meilleure façon mais je me suis mis en route.

hughsmac: ~ hbrien $ echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

Hugh Brien
la source
1
Sur une nouvelle installation Mavericks, c'est la seule solution qui a fonctionné pour moi. J'ai dû pointer sqldeveloper vers la maison jdk située ici (comme suggéré par ce fil pour le faire fonctionner.
chris
2

OSX Yosemite, ZSH et Java SE Runtime Environment 8, je devais:

$ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

et dans ~ / .zshrc, changez JAVA_HOME en export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"

mmell
la source
1

Vous avez le même problème après avoir mis à niveau mon Mac OS et les éléments suivants ont fonctionné pour moi:

  1. cmd> vi ~ / .bash_profile

  2. Ajoutez / mettez à jour la ligne pour JAVA_HOME: export JAVA_HOME = "/ Library / Java / JavaVirtualMachines / jdk1.7.0_15.jdk / Contents / Home"

  3. cmd> source ~ / .bash_profile ou ouvrez un nouveau terminal

Je pense que la version jdk peut différer, alors utilisez simplement la version que vous avez sous / Library / Java / JavaVirtualMachines /

user1270392
la source
1

Si vous avez besoin de plusieurs versions de JDK sous Mac OS X (Yosemite), il peut être utile d'ajouter des scripts pour basculer automatiquement entre eux.

Ce que vous faites est de modifier votre ~ / .bash_profile et d'ajouter ce qui suit:

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

Ce que le script fait est de supprimer d'abord les autres versions JDK dans le PATH afin qu'elles n'interfèrent pas avec notre nouvelle version JDK. Ensuite, il fait un usage intelligent de / usr / libexec / java_home qui est une commande qui répertorie les versions JDK installées. L' argument -v indique à java_home de renvoyer le chemin du JDK avec la version fournie, par exemple 1.7. Nous mettons également à jour le PATH pour pointer vers le répertoire bin du répertoire JAVA_HOME nouvellement trouvé . À la fin, nous pouvons simplement exécuter la fonction en utilisant

setjdk 1.7

qui sélectionne la dernière version JDK installée de la branche 1.7. Pour sélectionner une version spécifique, vous pouvez simplement exécuter

setjdk 1.7.0_51

au lieu. Exécutez / usr / libexec / java_home -V pour obtenir plus de détails sur la façon de choisir les versions.

PS N'oubliez pas de source ~ / .bash_profile après l'avoir enregistré.

azec-pdx
la source
1

Pour Java 11 (JDK 11), il peut être localisé avec la commande suivante:

/usr/libexec/java_home -v 11
Pavel
la source
0

Cette réponse est liée à Mountain Lion et non à Lion. J'avais besoin de le faire pour les outils de ligne de commande AWS. Selon les documents AWS , l'exécution des which javaretours /usr/bin/java.

Donc, je mets JAVA_HOME=/usrdans mon .bashrc.

Apparemment, /usr/bin/javac'est un lien symbolique vers /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javalequel tout fonctionne.

Mise à jour

Comme mentionné dans le commentaire ci-dessous, cette JAVA_HOMEvaleur n'est pas une solution idéale lorsque la JAVA_HOMEvariable d'environnement doit être utilisée par d'autres choses que les outils de ligne de commande AWS. Cela fonctionne bien pour les outils de ligne de commande AWS, comme indiqué dans leurs documents.

Anjan
la source
le fait est que / usr n'est pas un répertoire JAVA_HOME correct. Il est correct de localiser bin / java. Mais parfois, les constructeurs (ant, make) utilisent JAVA_HOME pour référencer le compilateur javac dans lib / tools.jar Votre solution échouera pour ceux-ci
Olivier Refalo
Ah, merci pour l'info. Tu as raison. Met à jour la réponse.
Anjan
0

Pour Mac Yosemite,

JDK 1.7.0_xx utilise

$ 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
Mikey
la source
Pouvez-vous s'il vous plaît ajouter plus d'informations pour rendre cette réponse utile.
Mika
0

Toute personne utilisant AUSKEY de l'Australian Tax Office (ATO) doit désinstaller AUSKEY. Cela a réglé mes problèmes JAVA_HOME.

Il n'est également plus nécessaire pour les utilisateurs MAC. Yah!

Kate
la source
0

J'utilise Fish shell sur High Sierra 10.13.4 et j'ai installé Java via Brew.

Il n'est pas configuré automatiquement, donc pour le configurer correctement sur mon système, je lance:

set -U JAVA_HOME (/usr/libexec/java_home)
chrismacp
la source
0

Définissez simplement java_home de la version 1.8 jdk dans le netbeans.conffichier:

/Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf

décommenter la ligne:

netbeans_jdkhome="path/to/jdk"

et définissez le chemin vers votre 1.8 jdk, dans mon cas:

netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

Cette approche vous permet d'avoir plusieurs versions jdk sur mac os

Alexander Kolundaev
la source
0

Pour les utilisateurs du terminal Fish sur Mac (je pense qu'il est également disponible sur Linux), cela devrait fonctionner:

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
Jaguar
la source
-1

pour utilisateur mac. java 8 devrait ajouter

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

réf: http://qiita.com/seri_k/items/e978c1339ce51f13e297

Kewin
la source