jre jdk entorno descargar configurar java sdk environment-variables

jdk - ¿Por qué el instalador de Java SDK no establece JAVA_HOME?



jre 11 download (6)

Siempre me pregunté por qué tengo que configurar manualmente la variable de entorno JAVA_HOME después de instalar Java SDK.

JAVA_HOME = c: / Archivos de programa / Java / jdk1.6.0_12

Visual Studio al menos proporciona un archivo por lotes para establecer este tipo de variables de entorno:

llame a "c: / Archivos de programa / Microsoft Visual Studio 9.0 / VC / vcvarsall.bat"

Java tiene algo similar? Intento crear un script de compilación que simplemente funcione después de instalar Java SDK. No quiero que la gente juegue con variables de entorno en su PC.


El mecanismo vcvarsall.bat es una forma conveniente para que Visual C ++ proporcione una consola con las variables correctas sin interferir con las variables de entorno del usuario / sistema. Sin embargo, asume que Installshield es la única forma de obtener código en el sistema. El JDK debe tolerar que se corte de un lugar a otro.

Si está buscando java.exe , el instalador Installshield debe ponerlo en % windir% / system32 , por lo que está disponible en la RUTA.

Puede obtener algunos consejos sobre la ubicación de las aplicaciones instaladas consultando el registro:

C:>REG QUERY "HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Development Kit/1.6" /v JavaHome ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Development Kit/1.6 JavaHome REG_SZ C:/dev/Java/jdk1.6.0_05

Sin embargo, no puede confiar absolutamente en esto, ya que esto hace suposiciones sobre el proveedor, la versión y el mecanismo de instalación.


No creo que JAVA_HOME sea una convención inventada o respaldada por Sun.

Probablemente recuerden el fiasco que era la variable de entorno CLASSPATH ** demasiado bien y prefieren mantenerse al margen de las variables de entorno.

** Esto se fomentó como la forma principal de establecer el classpath de JVM en los SDK y la literatura de Java anteriores, y dio lugar a que el usuario y varias aplicaciones se metieran con la variable de entorno, sobrescribiendo los cambios de los demás y dependiendo de los contenidos mutuamente contradictorios.


No estoy seguro de por qué esto es así, porque los instaladores resuelven claramente los problemas dependientes de la plataforma (que es, por supuesto, el objetivo de una JVM). ¿Estás seguro de que no estás mezclando el JRE con el JSDK?

Tal vez haya una forma de que su programa busque dónde está instalado java (eso sería un script, supongo), y luego configure JAVA_HOME y posiblemente lo agregue a la ruta.

IBM parece estar haciendo este truco ya: http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg21199220

Otra publicación interesante que hace alusión a la diferencia entre las instalaciones JRE y JSDK: http://confluence.atlassian.com/display/CONF26/Set+JAVA_HOME+variable+in+Windows

Espero que esto ayude.


Supongo que Java no quiere hacer nada que dependa de la plataforma. En Windows, los classpaths se configuran de forma diferente a LINUX / UNIX.


Esto puede ayudar a alguien más que termina aquí como yo. Solo quería usar Java como herramienta, no adoptarla como una forma de vida, así que solo necesitaba saber cómo se estaba estableciendo JAVA_HOME y por qué no era correcta. La respuesta resultó ser que la instalación de WinAnt establece JAVA_HOME (junto con ANT_HOME), pero solo se basa en el Java actualmente instalado. Entonces, si necesita cambiar la versión de Java y está usando Ant, la forma correcta de hacerlo es desinstalar WinAnt, desinstalar Java, instalar el nuevo Java y luego reinstalar WinAnt.


Puede instalar tantas versiones de Java como desee.

Sería peligroso para la configuración modificar una variable de entorno local como JAVA_HOME , ya que podría hacer referencia a una instalación Java existente.

Esto no tiene nada que ver con un supuesto "problema dependiente de la plataforma". ;)

Dado que las secuencias de comandos pueden depender de JAVA_HOME para JAVA_HOME ellas mismas, una vez más, sería desastroso que una nueva instalación de Java modifique JAVA_HOME : todas esas secuencias de comandos tendrían que iniciarse repentinamente con una nueva JVM potencialmente incompatible.

Además, al establecer $JAVA_HOME/bin o %JAVA_HOME%/bin en su ruta, puede cambiar dinámicamente JAVA_HOME a cualquier versión de Java que desee usar sin tener que hacer mucho con su variable PATH.

Michael Borgwardt ha hecho en los comentarios la interesante pregunta de seguimiento

Aún así, esto no explica por qué el instalador no establece JAVA_HOME cuando no está configurado previamente.

La respuesta es simple:

La configuración no puede saber si un script ya depende de JAVA_HOME o no .

Lo que significa que algunos scripts podrían probar el valor JAVA_HOME y, si no están configurados, consultar otro JVM instalado en otro lugar (y no olvide que mediante "instalar", solo se puede hacer referencia a "copiado": un JDK / JRE no siempre está instalado una configuración)

Si configura JAVA_HOME , eso puede interrumpir el comportamiento predeterminado de algunos de sus scripts.

No querer perturbar las secuencias de comandos hipotéticas que dependen de que un env var no se establezca me suena inútilmente paranoico: si una secuencia de comandos hace eso, entonces claramente QUIERE usar una JVM diferente cuando hay una instalada, no hay razón para evitar eso.

Mmm ... Dulce. Para lidiar con problemas de implementación masiva de forma diaria (para aplicaciones internas en mi tienda), puedo asegurarle que es un juego "paranoico" muy sensato.
Cuando implementa a un grupo (muy) grande de usuarios, no desea hacer ninguna suposición sobre su plataforma y configuraciones. "claramente QUIERE" es una suposición que no me atrevería a hacer (o redirijo mi teléfono a la tuya;) y usted maneja las llamadas enojadas).

Por ejemplo, tenemos muchos scripts que se inician con una JVM 1.4.2 desde Sun (JAVA_HOME no configurado en la plataforma de desarrollo, ruta de acceso predeterminada establecida directamente en la secuencia de comandos), o con 1.4.2 desde JRockit ( JAVA_HOME establecido, ya que es la intención objetivo en las plataformas de integración, preproducción y producción).

Pero instalamos regularmente el nuevo JDK1.6.x ya que lo usamos para lanzar el eclipse.

Supongamos que esos scripts quieren su JAVA_HOME establecido ... y nada funciona más.

... A lo que Robert Grant hace esta crítica sobre el terreno:

Está describiendo guiones que requieren una versión específica, pero aún así mira JAVA_HOME global. Eso es solo guiones mal pensados.

Si bien eso puede o no ser cierto, eso también ilustra precisamente mi punto:
"no desea hacer ninguna suposición": no se asumen en su plataforma / configuración, y no se asumen sus "mejores prácticas".
Lo primero puede sonar paranoico, lo último es sentido común: pensar que su producto (aquí una configuración JDK) no romperá nada en el entorno del usuario porque el usuario ha "correctamente" pensado sus scripts ... sería una locura.

GvS sugiere:

O simplemente podría tener la opción de hacerlo, deshabilitado por defecto

Eso significaría otra opción para incluir en las pantallas de configuración, una opción que debería ser cuidadosamente revisada por el usuario, y que puede tener consecuencias imprevistas, incluso cuando el usuario la selecciona pensando que sabe lo que está haciendo ...

Simplemente no vale la pena.