¿Cuál es el motivo de la existencia de la variable de entorno JAVA_HOME?

92

Muchas aplicaciones basadas en Java requieren establecer la variable env JAVA_HOME. ¿Cuál es el propósito de esta variable?

user496949
fuente
5
se puede leer aquí
Sergey Vedernikov
2
Encuentro que la pregunta aún no tiene respuesta. En cuanto a ejecutar Java en sí, no es necesario tener esta variable si tiene la carpeta con el binario en la ruta. Todas las respuestas señalan lo obvio: "Dónde se instaló java". Pero por qué: ¿cuál es el significado de ejecutar aplicaciones Java?
Wolf
7
a pesar de todos estos comentarios y respuestas, no veo ninguna razón real para establecer esta variable de entorno. Sin fundamento. Vine aquí tratando de configurar esto con wsdl2java. Si no estuviera usando esta herramienta, no necesito la variable env ... aparentemente es solo que algunas herramientas usan esta var. ¿pero por qué?
Thufir
@Thufir - Sin embargo, no he visto el motivo indicado explícitamente en ninguna parte. - JAVA_HOME es solo una convención. No tiene ningún significado especial aparte de que todos acordaron usarlo AFAIK: el único uso que veo es que brinda a las herramientas la capacidad de diferenciar entre el JRE que normalmente se establece en la variable PATH y el JDK. Normalmente, JAVE_HOME se establece en JDK. - Es explícito. No hay que lidiar con el orden de los directorios como lo tiene con PATH, donde podría haber varios lugares para encontrar Java exe.
Rohan

Respuestas:

22

Las variables de entorno son cadenas que contienen información como unidad, ruta o nombre de archivo.

La variable de entorno JAVA_HOME apunta al directorio donde está instalado el entorno de ejecución de Java (JRE) en su computadora.

kamaci
fuente
40
Una corrección: JAVA_HOME debería apuntar a un JDK, no a un JRE. A muchas aplicaciones no les importa la diferencia, pero para algunas es importante.
Chris Nava
4
También hay una carpeta JRE disponible en el JDK. Por tanto, con la ayuda de JAVA_HOME, una aplicación puede localizar tanto JDK como JRE.
chico pícaro
@ChrisNava: Parece que señalar JAVA_HOME a una instalación de JRE es válido en algunos casos (supongo que la mayoría de los casos que no son de desarrollo): stackoverflow.com/questions/17601827/… . Entonces, decir "debería" es decir demasiado.
cic
18

El propósito es señalar dónde está instalado Java. $JAVA_HOME/bin/javadebe ejecutar el tiempo de ejecución de Java.

Haakon
fuente
4
Pero es una estupidez, porque java debería estar en la ruta, y el binario puede ubicarse y abrir los otros archivos usando una ruta relativa.
LtWorf
3
Es útil cuando java no está en $ PATH, por ejemplo, cuando tiene varias instalaciones de SDK.
Haakon
El primer argumento del binario es el nombre completo del ejecutable en sí, java no necesita estar en la ruta para encontrar su propio directorio.
LtWorf
@Haakon Como alguien que intenta configurar varios JDK, ¿por qué no querría Java en la ruta? ¿Cómo localiza Windows Java desde java_home de todos modos? Pensé que la ruta estaba más o menos definida como "la lista de lugares donde el sistema operativo buscará ejecutables".
LastStar007
7

Cuando ejecuta un programa Java, primero debe iniciar la JVM, por lo general, esto se hace ejecutando un ejecutable, en Windows es java.exe . Puede obtenerlo de muchas maneras, por ejemplo, simplemente dando una ruta completa:

C:\somedir\bin\java.exe

o puede tenerlo en su RUTA.

Usted especifica como argumentos de línea de comando algunos archivos de clase o archivos Jar que contienen archivos de clase que son su programa. Pero eso no es suficiente, el propio java.exe necesita varios otros recursos, no menos todas las bibliotecas de Java. Al establecer la variable de entorno JAVA_HOME, especifica dónde se encuentra el JRE y, por lo tanto, todos esos recursos de tiempo de ejecución. Debe asegurarse de que el Java particular que ejecute coincida con la configuración de JAVA_HOME.

Es posible que también deba JAVA_HOME\bincomenzar su ruta de acceso para que, si java.exegenera una copia de sí mismo (por ejemplo, para compilar una JSP), elija la versión correcta.

djna
fuente
5

JAVA_HOMEes una variable de entorno .

Tiene que estar configurado en un sistema operativo diferente. Consulte los siguientes enlaces.

Consulte también aquí para obtener más información.

sgokhales
fuente
1
Estás combinando environmentcon path, que son cosas diferentes pero que se usan en Windows exactamente de la misma manera que en Linux.
Val
1
@val solo señala, que desde entonces se ha corregido en su respuesta.
barlop
Solo para agregar a la lista JAVA_HOME en Windows 10
filip_j
5

De acuerdo con @dirai aquí JAVA_HOMEno es utilizado por Java en sí , sino por algunas herramientas de terceros como por ejemplo Apache Tomcat. Sin embargo, la mayoría de las aplicaciones funcionarán sin esta variable configurada, pero algunas podrían mostrar un comportamiento inesperado.

karlsebal
fuente
3

JAVA_HOMEle permite ejecutar cualquiera de las múltiples instalaciones de Java. Incluso si /usr/lib/jvm/java-1.8.0/bin/java primero tiene en su PATH, es útil poder decir JAVA_HOME=/usr/lib/jvm/java-1.5.0y hacer que el "java" predeterminado con el que ejecuta programas use el otro, en su lugar, como una cuestión de configuración del entorno. Esto permite que un programador use el java que necesita, incluso si no está instalado en una ubicación normal del sistema, y ​​probar o proporcionar compatibilidad inversa con esa versión alternativa. Y no es vulnerable a que otro programa instalado lo restablezca en la RUTA, como una actualización de la versión principal de Java.

Nico Kadel-García
fuente