GNU/Linux >> Tutoriels Linux >  >> Linux

La commande "java" n'exécute pas la JVM qui a été installée

Le problème

Un JDK/JRE d'Oracle a été installé sur une machine Linux conformément aux instructions d'installation. La commande "java" n'exécute pas la JVM qui a été installée. Les applications Java peuvent ne pas s'exécuter si un environnement d'exécution Java inattendu est trouvé.

Exemple d'un serveur Red Hat :

$ java -version
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.4) (rhel-1.21.b17.el6-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

Avis de non-responsabilité :Les répertoires et les chemins utilisés dans cet article représentent des noms d'échantillons fictifs qui constituent un exemple. Toute similitude avec le code réel est purement fortuite et non intentionnelle d'une autre manière.

La solution

Un nouveau JDK/JRE d'Oracle a été installé conformément aux instructions d'installation. Exemple d'un serveur Red Hat :

# rpm -ivh jdk-7u6-linux-x64.rpm

La commande "java" est généralement un lien symbolique dans /usr/bin qui pointe (directement ou indirectement) vers l'exécutable Java réel. Habituellement, /usr/bin est l'une des premières entrées de la variable d'environnement PATH et donc /usr/bin/java est généralement celle qui est trouvée en premier si Java est lancé.

Pour les solutions possibles suivantes, supposons que vous avez installé le JDK dans /usr/java/jdk1.7.0_06/.

Solution 1 :Modifier le CHEMIN

Modifiez la variable d'environnement PATH afin que le nouveau JRE/JDK Oracle puisse être trouvé avant tout autre JRE.

Par exemple :

$ export PATH=/usr/java/jdk1.7.0_06/bin:$PATH
$ java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)

Solution 2 :Utiliser un chemin absolu

Utilisez le chemin absolu complet vers le JRE/JDK Oracle nouvellement installé afin d'exécuter des applications Java.

Par exemple :

$ /usr/java/jdk1.7.0_06/bin/java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode)

Solution 3 :Utiliser des alternatives de mise à jour

Utilisez la commande appelée update-alternatives afin d'indiquer à Linux où trouver le JRE/JDK Oracle que vous venez d'installer.

Remarque :la correction manuelle des liens symboliques tels que /usr/bin/java ou /etc/alternatives/java peut entraîner l'affichage de valeurs incorrectes par la commande update-alternatives ou même son échec de démarrage. Par conséquent, il est recommandé d'utiliser la commande update-alternatives afin d'installer et de configurer les liens symboliques souhaités au lieu de modifier les liens symboliques manuellement.

Utilisez "su" sur RedHat, utilisez "sudo" sur Ubuntu :

$ su -
# update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.7.0_06/bin/java" 1
# update-alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*+ 2           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   3           /usr/java/jdk1.7.0_06/bin/java

Enter to keep the current selection[+], or type selection number: 3
# exit
$ java -version
java version "1.7.0_06"
Java(TM) SE Runtime Environment (build 1.7.0_06-b24)
Java HotSpot(TM) 64-Bit Server VM (build 23.2-b09, mixed mode) 

Pour plus d'informations, veuillez consulter la page de manuel de update-alternatives.

$ man update-alternatives


Linux
  1. Comment fonctionne la commande Tee ? ?

  2. bash :netstat :commande introuvable.

  3. update-alternatives :commande introuvable

  4. créer un package java en ligne de commande

  5. La commande npm 'serve' est introuvable, bien qu'elle soit installée

L'utilité de la commande :dans les scripts Shell, étant donné qu'elle ne fait rien explicitement ?

Définir +a n'annule pas l'indicateur -a ?

Le périphérique Linux n'affiche pas l'espace disque correct après un redimensionnement

Comment définir l'utilisateur par défaut pour une distribution WSL qui a été installée manuellement avec wsl --import

La commande Linux sed ne modifie pas le fichier cible

Que signifie exactement le périphérique d'entrée n'est pas un TTY dans la sortie d'exécution du docker ?