Comment définir JAVA_HOME sous Linux pour tous les utilisateurs

185

Je suis nouveau sur le système Linux et il semble y avoir trop de dossiers Java.

java -version me donne:

  • version java "1.7.0_55"
  • Environnement d'exécution OpenJDK (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • VM serveur OpenJDK 64 bits (build 24.51-b03, mode mixte)

Lorsque j'essaie de créer un projet Maven, j'obtiens une erreur:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Pourriez-vous s'il vous plaît me dire quels fichiers je dois modifier pour l'utilisateur root et non root et où se trouve exactement Java?

Bosco
la source

Réponses:

353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Ajoutez sudo si vous êtes connecté en tant qu'utilisateur non privilégié, c.-à-d. sudo vim

  3. Appuyez sur 'i' pour passer en mode insertion
  4. ajouter:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
    
  5. déconnectez-vous et reconnectez-vous, redémarrez ou utilisez source /etc/profilepour appliquer les modifications immédiatement dans votre shell actuel
Ce Dave Guy
la source
29
n'oubliez pas de supprimer les guillemets et de les recréer à partir de votre clavier, car seuls les copier-coller peuvent créer des problèmes.
Sunil Kumar
12
@rbaleksandar dépend de certaines applications JAVA_HOME, cela ne fait pas de mal de le configurer.
raffian
2
IntelliJ est une telle application - et non une application mineure.
Pete
12
Vous devez également exécuter source /etc/profilepour que les modifications prennent effet immédiatement!
Mohamed Taher Alrefaie
1
Cela m'a indiqué la bonne direction. Il y avait en fait un vicié /etc/profile.d/jdk.shflottant dans mon système.
Hermann
109

Pour tous les utilisateurs, je recommanderais de placer la ligne suivante dans /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Cela se mettra à jour dynamiquement et fonctionnera bien avec le système d' alternatives . Notez cependant que la mise à jour n'aura lieu que dans un nouveau shell de connexion.

Eero Aaltonen
la source
10
pour se conformer simplement à l'utilisation de JRE (même sans tête) à la export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")place - notez que j'utilise juste java, pasjavac
Roman Kruglov
@occulta Au moins Maven s'attend à ce que JAVA_HOME pointe vers un JDK et l'utilise pour localiser le compilateur java.
Eero Aaltonen
1
Vote positif readlinket mise à jour / mise à niveau de la solution compatible, même s'il s'agit d'un fil de discussion vieux de 5 ans. Je recommande seulement de ne pas modifier / etc / profile, mais de placer votre exportation dans un fichier personnalisé, par exemple /etc/profile.d/java_environment.sh, vous devez peut-être le faire chmod +x java_environment.shet redémarrer.
ChristophS
Parfait. Mieux que ma dirnamesolution maladroite . Si vous êtes comme moi et que vous souhaitez comprendre ce qui se passe ici, il s'agit d'un simple remplacement du texte correspondant de l'entrée par une chaîne vide. Le caractère "par défaut" pour les remplacements est le /, mais tant que vous êtes cohérent, vous pouvez remplacer le /par n'importe quoi. Dans ce cas, ce sont les deux points que nous utilisons /pour les séparateurs de chemin.
Ungeheuer
35

Vous pouvez utiliser / etc / profile ou mieux un fichier comme /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Vous devez vous rappeler que ce fichier n'est chargé qu'avec de nouveaux shells de connexion. Donc après bash -l ou une nouvelle session gnome et qu'il ne change pas avec les nouvelles versions de Java.

flob
la source
1
au moins dans mon linux (raspbian), / etc / profile sera source, /etc/profile.d/*.shdonc votre fichier doit être appelé jdk_home.shpour qu'il soit source
Hilikus
Merci @Hilikus :-) Je l'ai changé en conséquence.
flob
2
Je vous remercie. J'ai fait un mélange de votre réponse et de @ Eero pour le meilleur des deux mondes;)
Hilikus
1
C'est la meilleure réponse
Jacob
/etc/profile.d/jdk_home.shest la réponse beaucoup plus claire, du moins pour Ubuntu , /etc/profileest déjà encombrée de tant de logique. Il n'a pas semblé sage d'en ajouter plus ...
Ng Sek Long
30

Aucune des autres réponses ne "collait" pour moi dans RHEL 7, même le réglage JAVA_HOMEet PATHdirectement /etc/profileou ~/.bash_profilene fonctionnerait pas. Chaque fois que j'essayais de vérifier si JAVA_HOMEétait défini, il devenait vide:

$ echo $JAVA_HOME
    (<-- no output)

Ce que je devais faire était de configurer un script dans /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

J'ai d'abord négligé la première ligne (la #!/bin/sh), et cela ne fonctionnera pas sans elle.

Maintenant ça marche:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Kyle Falconer
la source
J'ai eu la même expérience sur RHEL 7. J'ai supprimé les exportations de ~ / .bash_profile et utilisé cette approche.
xpagesbeast
#! / bin / sh n'est pas requis dans votre jdk_home.sh. une fois la configuration terminée, assurez-vous de vous déconnecter et de vous reconnecter
kuhajeyan
12

Il est très facile de définir un chemin sous Linux. Procédez comme suit:

Étape 1 Ouvrez le terminal et tapez sudo gedit .bashrc

Étape-2 Il vous demandera votre mot de passe. Après avoir tapé le mot de passe, il ouvrira le fichier bash. Ensuite, allez à la fin et tapez ci-dessous

étape 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

étape-4 Ensuite, enregistrez le fichier et quittez le fichier

Ci-dessus est pour un seul utilisateur. Pour tous les utilisateurs, vous devez suivre les étapes ci-dessous

Étape 1 gedit /etc/profile

Étape 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Étape 3 export PATH=$PATH:$JAVA_HOME/bin

J'espère que cela t'aides. Merci!

PyDevSRS
la source
2
cette réponse le définit uniquement pour l'utilisateur actuel.
Manuel Manhart
Merci @ickyrr
PyDevSRS
7

Faire ce qu'Oracle fait (en tant qu'ancien employé de Sun, je ne peux pas m'habituer à celui-là)

ln -s latestJavaRelease / usr / java / default
Où latestJavaRelease est la version que vous souhaitez utiliser

puis exportez JAVA_HOME = / usr / java / default

Steve S
la source
6

La réponse est donnée aux messages précédents est valide. Mais pas une seule réponse n'est complète en ce qui concerne:

  1. Changer le / etc / profile n'est pas recommandé simplement pour la raison (comme indiqué dans / etc / profile):
  • Ce n'est PAS une bonne idée de modifier ce fichier à moins que vous ne sachiez ce que vous faites. Il est préférable de créer un script shell custom.sh dans /etc/profile.d/ pour apporter des modifications personnalisées à votre environnement, car cela évitera la nécessité de fusionner dans les futures mises à jour. *
  1. Ainsi, comme indiqué ci-dessus, créez le fichier /etc/profile.d/custom.sh pour les modifications personnalisées.

  2. Maintenant, pour toujours rester à jour avec les nouvelles versions de Java installées, ne mettez jamais le chemin absolu, utilisez plutôt:

#if faire de jdk comme java home

export JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

OU

#if faisant jre comme java home

export JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. Et n'oubliez pas d'avoir #! / bin / bash sur le fichier custom.sh
alok ailawadi
la source
4

Copiez le chemin du fichier bin que vous avez installé

YOUR PATH

ouvrez le terminal et éditez le fichier d'environnement en tapant la commande suivante,

sudo nano /etc/environment

Dans ce fichier, ajoutez la ligne suivante (en remplaçant YOUR_PATHpar le chemin qui vient d'être copié):

JAVA_HOME="YOUR_PATH"

Cela devrait suffire à définir la variable d'environnement. Maintenant, rechargez ce fichier:

source /etc/environment

testez-le maintenant en exécutant:

echo $JAVA_HOME
VirangaMahesh
la source
3
olny effets session terminale actuelle
Fatih Türker
@ FatihTürker Redémarrez votre PC
Jack Giffin
Pour moi utilisant jdk11, YOUR_PATH est/usr/lib/jvm/default-java/
Jack Giffin
2

Sous Linux, j'ajoute cette ligne à mon ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Emanuel Oliveira
la source
2
Cela semble une réponse potentiellement correcte, mais pourriez-vous expliquer pourquoi cela fonctionne, c'est-à-dire ce que cela fait et quel est le problème du PO? De plus, vous dites «sous Linux», mais il existe de nombreuses distributions Linux différentes et cela pourrait ne pas fonctionner pour toutes, veuillez ajouter pour quelle distribution cela fonctionne.
Buurman
2

Étape 1 - Vérifiez la version java actuelle par "echo $ JAVA_HOME"

Étape 2 - vim / etc / profile

Étape 3 - À la fin du fichier, vous trouverez l'export JAVA_HOME, nous devons fournir le nouveau chemin ici, assurez-vous qu'il n'est pas relatif.

Étape 4 - Enregistrer et quitter: wq

Étape 5 - "source / etc / profile /", cela exécuterait le changement

Étape 6 - Faites à nouveau un echo $ JAVA_HOME - le changement aurait été reflété.

swapnil shashank
la source
2

1 ... Utilisation du raccourci Ctlr+ Alt+ Tpour ouvrir le terminal

2 ... Exécutez la commande ci-dessous:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (recommandé) Redémarrez votre VM / ordinateur. Vous pouvez utiliser source /etc/sourcesi vous ne voulez pas redémarrer l'ordinateur

4 ... Utilisation du raccourci Ctlr+ Alt+ Tpour ouvrir le terminal

5 ... Versement JAVA_HOME vérifié avec

echo $JAVA_HOME

Copie d'une seule ligne de flob , crédit à eux

Ng Sek Long
la source
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
la source
1

Probablement une bonne idée de rechercher le profil que vous modifiez pour éviter d'avoir à utiliser une nouvelle connexion.

soit: source / etc / ou. /etc/

Où est le profil que vous avez modifié.

Bryant Bernstein
la source
1

Pendant que nous sommes sur le point de configurer JAVA_HOME, permettez-moi de partager quelques avantages de la configuration de JAVA_HOME ou de toute autre variable d'environnement:

1) Il est facile de mettre à niveau JDK sans affecter le démarrage de votre application et le fichier de configuration qui pointe vers JAVA_HOME. il vous suffit de télécharger la nouvelle version et de vous assurer que votre JAVA_HOME pointe vers la nouvelle version de Java. C'est le meilleur avantage de l'utilisation de variables d'environnement ou de liens.

2) La variable JAVA_HOME est courte et concise au lieu du chemin complet vers le répertoire d'installation JDK.

3) La variable JAVA_HOME est indépendante de la plate-forme, c'est-à-dire que si votre script de démarrage utilise JAVA_HOME, il peut fonctionner sous Windows et UNIX sans aucune modification, il vous suffit de définir JAVA_HOME sur le système d'exploitation respectif.

En savoir plus: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

client
la source
1

Ceci est un script très simple pour résoudre le problème

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

Et pour tester:

echo $JAVA_HOME
Dylan Breugne
la source
1

Poster comme réponse, car je n'ai pas le privilège de commenter.

Point à noter : suivez la réponse acceptée postée par "That Dave Guy".

Après avoir défini les variables, assurez-vous de définir les autorisations appropriées sur le répertoire java où il est installé.

chmod -R 755 /usr/java
Van Peer
la source
1

Toutes les étapes opérationnelles (recherche de java, répertoire parent, édition de fichier, ...) une solution

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Résultat:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Explication:

1) Divisons la commande complète en morceaux

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Trouvez le chemin java à partir de la commande java

# $(which java)
"/usr/bin/java"

3) Obtenir le chemin relatif à partir du chemin symbolique

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Obtenir le chemin parent de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Obtenir le chemin parent de /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
Ahmet
la source
0

Utilisez SDKMAN sdkman.io pour basculer entre btw. votre sdk.

Il définit le JAVA_HOME pour vous.

Stefan Höltker
la source
0

ouvrez kafka-run-class.sh avec sudo pour écrire

vous pouvez trouver kafka-run-class.sh dans votre dossier kafka : kafka / bin / kafka-run-class.sh

vérifier ces lignes

entrez la description de l'image ici

Modifiez la variable JAVA dans la partie else pour pointer vers l'exécutable java dans votre java / bin. comme JAVA = "$ JAVA_HOME / java"

Ashish Verma
la source
0

Dans / etc / profile, si vous l'ouvrez, vous saurez qu'il n'est pas recommandé d'écrire sur ce fichier. Au lieu de cela, créez un script de vos commandes (supposons que test.sh) va dans le dossier /etc/profile.d et placez test.sh là. Chaque fois que vous redémarrez l'instance, elle sera automatiquement appelée par / etc / profile.

Noha
la source
-1

J'utilise la ligne:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

à mon ~ / .profile afin qu'il utilise la base du répertoire java par défaut au moment de la connexion. C'est pour bash.

darkhipo
la source