quelle est la raison de l'existence de la variable d'environnement JAVA_HOME?

92

De nombreuses applications Java nécessitent de définir la variable d'environnement JAVA_HOME. Quel est le but de cette variable?

user496949
la source
5
vous pouvez lire ici
Sergey Vedernikov
2
Je trouve que la question n'a pas encore de réponse. Pour exécuter java lui-même, il n'est pas nécessaire d'avoir cette variable si vous avez le dossier avec le binaire dans le chemin. Toutes les réponses soulignent l'évidence: "Où java a été installé". Mais pourquoi: quel est le sens de l'exécution d'applications Java?
Wolf
7
malgré tous ces commentaires et réponses, je ne vois aucune raison réelle de définir cette variable d'environnement. Aucune justification. Je suis venu ici après avoir essayé de définir cela avec wsdl2java. Si je n'utilisais pas cet outil, pas besoin de la variable env .... apparemment c'est juste que certains outils utilisent cette var. mais pourquoi?
Thufir
@Thufir - Je n'ai cependant vu la raison explicite nulle part. - JAVA_HOME est juste une convention. Cela n'a pas de signification particulière à part le fait que tout le monde a accepté de l'utiliser AFAIK - La seule utilisation que je vois est que cela donne aux outils la possibilité de différencier le JRE qui est normalement défini dans la variable PATH et le JDK. Normalement, JAVE_HOME est défini sur le JDK. - C'est explicite. Il n'y a pas de gestion de l'ordre des répertoires comme vous avez avec PATH où il pourrait y avoir plusieurs endroits pour trouver java exe.
Rohan

Réponses:

22

Les variables d'environnement sont des chaînes contenant des informations telles que le lecteur, le chemin ou le nom de fichier.

La variable d'environnement JAVA_HOME pointe vers le répertoire dans lequel l'environnement d'exécution Java (JRE) est installé sur votre ordinateur.

Kamaci
la source
40
Une correction: JAVA_HOME doit pointer vers un JDK et non vers un JRE. De nombreuses applications ne se soucient pas de la différence, mais elle est importante pour certaines.
Chris Nava
4
Il existe également un dossier JRE disponible dans le JDK. Par conséquent, avec l'aide de JAVA_HOME, une application peut localiser JDK ainsi que JRE.
rogue lad
@ChrisNava: Il semble que pointer JAVA_HOME vers une installation JRE est valide dans certains cas (la plupart des cas non liés au développement, je suppose): stackoverflow.com/questions/17601827/… . Donc dire «devrait», c'est en dire trop.
cic
18

Le but est de pointer vers l'endroit où Java est installé. $JAVA_HOME/bin/javadoit exécuter le runtime Java.

Haakon
la source
4
Mais c'est stupide, car java devrait être dans le chemin, et le binaire peut se localiser et ouvrir les autres fichiers en utilisant un chemin relatif.
LtWorf
3
C'est utile lorsque java n'est pas sur $ PATH, par exemple lorsque vous avez plusieurs installations SDK.
Haakon
Le 1er argument du binaire est le nom complet de l'exécutable lui-même, java n'a pas besoin d'être dans le chemin pour trouver son propre répertoire.
LtWorf
@Haakon En tant que personne essayant de configurer plusieurs JDK, pourquoi ne voudriez-vous pas que Java soit sur le chemin? Comment Windows trouve-t-il quand même java à partir de java_home? Je pensais que le chemin était plus ou moins défini comme "la liste des endroits où le système d'exploitation recherchera les exécutables".
LastStar007
7

Lorsque vous exécutez un programme Java, vous devez d'abord démarrer la JVM, généralement en exécutant un exécutable, sous Windows, il s'agit de java.exe . Vous pouvez obtenir cela de nombreuses façons, par exemple en donnant simplement un chemin complet:

C:\somedir\bin\java.exe

ou peut l'avoir sur votre PATH.

Vous spécifiez comme arguments de ligne de commande des fichiers de classe ou des fichiers Jar contenant des fichiers de classe qui sont votre programme. Mais cela ne suffit pas, le java.exe lui-même a besoin de diverses autres ressources, notamment toutes les bibliothèques Java. En définissant la variable d'environnement JAVA_HOME, vous spécifiez où se trouvent le JRE, et donc toutes ces ressources d'exécution. Vous devez vous assurer que le Java particulier que vous exécutez correspond au paramètre JAVA_HOME.

Vous devrez peut-être également mettre JAVA_HOME\bintôt votre chemin pour que si le produit java.exeune copie de lui-même (par exemple pour compiler une JSP), il choisisse la bonne version.

djna
la source
5

JAVA_HOMEest une variable d'environnement .

Il doit être configuré sur un système d'exploitation différent. Consultez les liens suivants.

Voir aussi ici pour plus d'informations.

sgokhales
la source
1
Vous confondez environmentavec pathdes choses différentes mais utilisées sous Windows exactement de la même manière que sous Linux.
Val
1
@val fait juste remarquer, cela a depuis été corrigé dans sa réponse.
barlop
Juste pour ajouter à la liste JAVA_HOME sous Windows 10
filip_j
5

Selon @dirai, ici JAVA_HOMEn'est pas utilisé par Java lui-même mais par certains outils tiers comme par exemple Apache Tomcat. Cependant, la plupart des applications fonctionneront sans que cette variable soit définie, mais certaines pourraient présenter un comportement inattendu.

Karlsebal
la source
3

JAVA_HOMEvous permet d'exécuter l'une des multiples installations java. Même si vous avez d'abord le /usr/lib/jvm/java-1.8.0/bin/java dans votre PATH, il est utile de pouvoir dire JAVA_HOME=/usr/lib/jvm/java-1.5.0et faire en sorte que le "java" par défaut avec lequel vous exécutez les programmes utilise l'autre, à la place, comme une question d'environnement. Cela permet à un programmeur d'utiliser le java dont il a besoin, même s'il n'est pas installé dans un emplacement système normal, et de tester ou de fournir une compatibilité inverse avec cette version alternative. Et il n'est pas vulnérable à une réinitialisation dans le PATH par un autre programme installé, comme une mise à jour de version majeure pour Java lui-même.

Nico Kadel-Garcia
la source