Ejecutar Java usando una unión para la carpeta del ejecutable no funciona

Ejecutar Java usando una unión para la carpeta del ejecutable no funciona

Acabo de actualizar de la versión 8 de Java a la versión 12. El sistema operativo es Windows 7 Home.

Como Oracle ya no proporciona un JRE separado, cuando ejecuto un programa necesito proporcionar el nombre de la carpeta para el ejecutable de Java. Para que sea más fácil cambiar la carpeta cuando se actualiza Java, puse una unión en una de mis carpetas y la agregué a mi RUTA. Pero no funciona. Aquí hay una sesión de línea de comandos ligeramente editada.

Primero verifique que el cruce y el camino estén bien:

D:\Peter\PC>dir jre*

27/09/2019  15:11    <JUNCTION>     JREDir [C:\Program Files\Javajdk-12.0.1\bin]

D:\Peter\PC>dir jredir\java*
 Volume in drive D is DATA
 Volume Serial Number is CE44-C814

 Directory of D:\Peter\PC\jredir

27/09/2019  11:36           148,328 java.dll
27/09/2019  11:36            51,048 java.exe
27/09/2019  11:36           226,664 javaaccessbridge.dll
27/09/2019  11:36            20,840 javac.exe
27/09/2019  11:36            20,840 javadoc.exe
27/09/2019  11:36           174,952 javajpeg.dll
27/09/2019  11:36            20,840 javap.exe
27/09/2019  11:36            51,048 javaw.exe
               8 File(s)        714,560 bytes
               0 Dir(s)  149,081,808,896 bytes free
C:\>path
PATH=C:\Program Files (x86)...ls\Binn\;D:\Peter\PC\JREDir

Ahora intenta ejecutar Java usando el nombre de la unión.

D:\Peter\PC>jredir\java -version
Error: opening registry key 'Software\JavaSoft\JRE'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

Esto parece encontrar el ejecutable de Java, pero necesita una clave de registro. Sin embargo, hacer un cd en el directorio del ejecutable funciona bien.

C:\Program Files\Java\jdk-12.0.1\bin>java -version
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

al igual que ejecutarlo con un nombre de directorio explícito:

D:\Peter\PC>"C:\Program Files\Java\jdk-12.0.1\bin"\java -version
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

Pero ejecutarlo usando la ruta no es así.

C:\>java -version
Error: opening registry key 'Software\JavaSoft\JRE'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.

Entonces tengo dos preguntas:

  1. ¿Por qué no funciona el cruce? Probé un enlace simbólico pero tampoco funcionó.
  2. ¿Qué se necesita en el registro para que funcione?

Respuesta1

Sé que es una pregunta antigua, pero la comparto para referencia futura.

En el ejemplo, el cruce tiene un nivel demasiado profundo. No debería serlo C:\Program Files\Javajdk-12.0.1\binsino más bienC:\Program Files\Javajdk-12.0.1

información relacionada