Que dois-je définir la variable d'environnement JAVA_HOME sur macOS X 10.6?

436

De nombreuses applications Java qui utilisent des scripts shell pour configurer leur environnement utilisent la JAVA_HOMEvariable d'environnement pour démarrer la bonne version de Java, localiser les JAR JRE, etc.

Dans macOS X 10.6, les chemins suivants semblent être valides pour cette variable

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

Certains d'entre eux sont des liens symboliques vers la machine virtuelle actuelle réelle (telle que définie dans le volet Préférences Java).

Mais lequel devrait être utilisé - ou est-il acceptable d'en utiliser un?

Robert Christie
la source

Réponses:

849

Je viens de définir JAVA_HOMEla sortie de cette commande, qui devrait vous donner le chemin Java spécifié dans vos préférences Java. Voici un extrait de mon .bashrcfichier, qui définit cette variable:

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

Je n'ai rencontré aucun problème avec cette technique.

Parfois, je dois changer la valeur de JAVA_HOMEpour une version antérieure de Java. Par exemple, un programme que je gère nécessite Java 5 bits 32 sur OS X, donc lors de l'utilisation de ce programme, j'ai défini JAVA_HOMEen exécutant:

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

Pour ceux d'entre vous qui n'ont pas java_homesur votre chemin, ajoutez-le comme ceci.

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

Références :

mipadi
la source
20
Mountain Lion l'a aussi
sghill
57
Toujours valable pour Mavericks
Pascal
42
Toujours valable pour Yosemite. ;)
Geoffrey Wiseman
42
El capitan. Vérifier!
gattshjoty
11
Toujours valable pour Mojave
Keuha
40

En outre, il est intéressant de définir votre PATH pour refléter le JDK. Après avoir ajouté JAVA_HOME (ce qui peut être fait avec l'exemple cité par 'mipadi'):

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

Ajoutez également dans ~ / .profile:

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

PS: Pour OSX, j'utilise généralement .profile dans le répertoire HOME au lieu de .bashrc

lucasarruda
la source
Pour OSX exécutant bash par défaut, j'utilise généralement le bash .bash_profile- pourquoi utilisez-vous que le générique .profile?
LeeGee
1
Étant donné qu'il .profileest générique, il fonctionnera avec shou bash, tandis qu'il .bash_profileest exclusif à bash. Cela isole également les paramètres des applications qui utilisent .bash_profile, comme MacPorts. Mais vous pouvez utiliser l'un des deux en toute sécurité. En savoir plus ici
lucasarruda
1
- Pour info, le lien que vous avez fourni confirme ma suspicion que sous bash (ie par défaut), utilisation de .bash_profiledérogations .profile.
LeeGee
@LeeGee oui, et il le fait parce qu'il .bash_profileest spécifique, alors qu'il .profileest générique, pour toutes les shvariantes.
lucasarruda
1
Étant donné que OS / X met un lien vers javavotre, /usr/binil ne devrait pas être nécessaire d'ajouter explicitement $JAVA_HOMEà votre chemin.
Zac
20

J'ai MAC OS X (Sierra) 10.12.2 .

J'ai configuré JAVA_HOME pour qu'il fonctionne sur React Native (pour les applications Android) en suivant les étapes suivantes.

  • Ouvrez Terminal (Commande + R, tapez Terminal, appuyez sur ENTRÉE).

  • Ajoutez les lignes suivantes à ~ / .bash_profile . export JAVA_HOME=$(/usr/libexec/java_home)

  • Exécutez maintenant la commande suivante. source ~/.bash_profile

  • Vous pouvez vérifier la valeur exacte de JAVA_HOME en tapant la commande suivante. echo $JAVA_HOME

La valeur (sortie) retournée sera quelque chose comme ci-dessous. /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

C'est ça.

hygull
la source
C'est utile, merci. Mais je pense que vous avez manqué d'inclure la dernière étape, qui définit ensuite JAVA_HOME sur la valeur retournée dans .bashrc / .bash_profile / .zshrc / etc. Veuillez me corriger si je me trompe.
TheProletariat
2
Ce n'est pas obligatoire. Dans mon cas, se $JAVA_HOMEréfère $(/usr/libexec/java_home)et $(/usr/libexec/java_home) est référé en interne /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homepar le système.
hygull
1
Je l'ai. C'était nécessaire dans mon cas. Merci.
TheProletariat
14

Je suis sur Mac OS 10.6.8

La solution la plus simple qui fonctionne pour moi est tout simplement

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

Pour tester si cela fonctionne, insérez

$ echo $JAVA_HOME

ça montre

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

vous pouvez également tester

$ which java
Rae
la source
9

J'ai tendance à utiliser /Library/Java/Home. Le fonctionnement du volet des préférences doit être à jour avec votre version préférée.

Clint
la source
/poubelle . et vérifiez qu'il pointe vers / Library / java et non / System / Library / .. car celui-ci peut être obsolète.
JRun
1
Ce n'est plus exact. Sous OS X 10.5 et versions ultérieures, utilisez / usr / libexec / java_home pour trouver le chemin.
Kristopher Johnson
8

Cela ne fonctionne plus dans YOSEMITE pour des APPLICATIONS GRAPHIQUES! Comme l'éclipse, ou tout ce qui a commencé avec Spotlight. (.bash_profile, launchd.conf ne fonctionne que pour les sessions de terminal.) Avant de démarrer eclipse, ouvrez simplement une fenêtre de terminal et donnez la commande suivante:

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

(Avec votre chemin d'installation! Fonctionne peut-être avec $ (/ usr / libexec / java_home) au lieu du chemin complet aussi.)

Consultez ici l'excellent article sur la solution permanente: la définition des variables d'environnement via launchd.conf ne fonctionne plus sous OS X Yosemite / El Capitan / macOS Sierra?

Pálossy László
la source
2

J'ai trouvé cette pile pour aider, j'avais le même problème et je pouvais résoudre:

Mon chemin java était ici:

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

et était nécessaire pour mettre dans mon .bash_profile:

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

J'espère que l'aide

Shirow
la source
2

Ignorer la configuration du terminal depuis que vous avez mentionné les applications, la configuration permanente des variables d'environnement système (fonctionne pour macOS Sierra; devrait également fonctionner pour El Capitan):

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

(cela mis JAVA_HOME au dernier 1,8 JDK, les chances sont que vous avez passé par serveral mises à jour par exemple javac 1.8.0_101, javac 1.8.0_131)
pour répondre à vos besoins et votre système Bien sûr, le changement de 1,8 à 1.7 ou 1.6 (vraiment?)

Ericn
la source
1

Comme d'autres réponses le notent, la bonne façon de trouver le répertoire de base Java est d'utiliser /usr/libexec/java_home.

La documentation officielle à ce sujet se trouve dans les questions et réponses techniques d'Apple QA1170: répertoires Java importants sur OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html

Kristopher Johnson
la source
Ceci est un doublon!
Franklin Yu
Je pense que l'inclusion du lien vers la documentation officielle d'Apple ne la rend pas redondante. Mais si c'est le cas, la bonne action consiste à le signaler comme Duplicate, pas à faire un commentaire.
Kristopher Johnson
J'ai fait un commentaire parce que je ne peux pas marquer une réponse comme doublon. Stack Overflow permet uniquement à l'utilisateur de marquer une question comme doublon (malheureusement). Le lien est utile, mais je pense qu'un commentaire sur la réponse actuelle (ou simplement le modifier avec le lien puisque vous en avez déjà la capacité) serait mieux car il concentre toutes les informations utiles dans une seule réponse. Je crois qu'il y avait quelque part une directive selon laquelle Stack Overflow préfère fixer les réponses actuelles plutôt que d'en écrire une nouvelle.
Franklin Yu
1

Pour moi, maven semble fonctionner à partir du .mavenrcfichier:

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

Je suis sûr que je l'ai ramassé sur SO aussi, je ne me souviens plus où.

maksimov
la source
1

Créer un fichier ~/.mavenrc

puis collez-le dans le fichier

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

tester

mvn -v

KhaledMohamedP
la source
J'aime cette approche, car elle me permet de changer très facilement la version Java dans le fichier .mavenrc.
Spindizzy
1

Il est recommandé de vérifier le shell du terminal par défaut avant de définir la variable d'environnement JAVA_HOME , via les commandes suivantes:

$ echo $SHELL
/bin/bash

Si votre terminal par défaut est / bin / bash (Bash), vous devez utiliser @hygull méthode

Si votre terminal par défaut est / bin / zsh (Z Shell), vous devez définir ces variables d'environnement dans le fichier ~ / .zshenv avec le contenu suivant:

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

De même, pour tout autre type de terminal non mentionné ci-dessus, vous devez définir la variable d'environnement dans son fichier env de terminal respectif.

Cette méthode a testé son fonctionnement dans la version 10.14.6 de macOS Mojave .

Jerry Chong
la source
-1

Pour les utilisateurs de Fish Shell, utilisez quelque chose comme ceci: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

Yichuan Wang
la source