@ agnasg

agnasg


Cómo solucionar problemas con Múltiples Versiones de Java en la misma Máquina

30-09-2010 11:18 AM

En la continuación de mis peripecias con Java, al parecer el java de mi máquina se enteró de mi berrinche en su contra, porque estuve tratando de ejecutar un programa jnlp sin éxito durante un par de días. En primera instancia mi opinión era que el programa era incompatible con la versión de java que tenía instalada. Yo tengo al menos 4 versiones en c:\Archivos de Programa\Java porque con frecuencia utilizo varias aplicaciones Java y, por supuesto, algunas trabajan con versiones específicas. En particular mi versión de Pentaho trabaja con el tomcat que requiere Java 1.5. Alfresco puede y debe trajajar con Java 1.6. Además estas aplicaciones requieren la variable JRE_HOME definida en Panel de Control…Variables de Entorno, pero los programas jnlp que se ejecutan con javaws al parecer no le hace caso a nada de esto. He hecho muchas pruebas a lo largo del tiempo y tengo Java 1.6.0_16, 1.6.0_11 y para hacer funcionar el programa jnlp instalé Java 1.6.0_21 (la última versión)
No funciona. No funciona. No funciona. Hice pruebas en una máquina con Windows XP con Java 1.6.0_11 y el jnlp funcionó. Así que el problema es mi máquina.
Me fui a Panel de Control->Agregar o Quitar Programas y en la lista aparecieron las 3 versiones de Java. ¿Eso está bien? A mi me sonó que estaba mal. Así que traté de borrarlas. La 1.6.0_11 y la 1.6.0_21 se dejaron borrar pero la 1.6.0_16 abortaba (no encontré un log en alquna parte que dijera cuál era el problema, pero esa es otra historia. Hice algunas búsquedas google y descubrí que podía borrarla manualmente ejecutando estos comandos:

rd /s %System_Root%\java
del %System_Root%\inf\java.pnf
del %System_Root%\SYSTEM32\jview.exe
del %System_Root%\SYSTEM32\wjview.exe
del %System_Root%\SYSTEM32\javaws.exe
del %System_Root%\SYSTEM32\java.exe

¿Por qué el instalador toca o tiene que instalar programas en Windows\System32, si yo tengo mis programas instalados en C:\Archivos de Programa\Java\ ? Ni idea, pero desde el punto de vista de programación me pareció un asco hacer eso. Algún orden se debe tener para poder instalar múltiples versiones en una misma máquina. ¿O es que Java/Microsoft pretenden que en una máquina solamente se pueda instalar una versión de Java? No puede ser.

De cualquier forma me fui a Panel de Control->Sistema->Opciones Avanzadas->Variables de Entorno y declaré el Camino (Path) a la versión de Java que QUIERO USAR, tal como se muestra a continuación:

java-path

NO FUNCIONA. NO Funciona. no funciona. Siguiente paso fue ir al directorio donde está el programa jnlp y ejecutar javaws.exe programa.jnlp.  NO FUNCIONA. NO Funciona. no funciona. ¿Estoy seguro que estoy usando la versión de Java correcta y que no hay confusión de versiones? No, y con la combinación maravilla de Java instalado en MICROSOFT nadie puede estar seguro así que ejecuté javaws.exe -viewer para que ver que versión estoy usando.

javaws-version

¿1.6.0_16? WTF!!! Fui a Windows a revisar, si estaba instalado en alguna otra parte sin resultado. Me olvidé de google, porque sobre cómo reinstalar, mezclar, combinar, batir, juntar y desjuntar versiones de java en Microsoft o las recomendaciones son color de rosa, o aparece el último mensaje en el foro sin respuesta, lo cual siempre me ha resultado terrible.

Lo último que me quedaba por revisar era regedit. El tristemente célebre editor de registros de windows. El peor sistema de configuración de programas que existe sobre la tierra. Hice una búsqueda de la palabra Java y apareció la siguiente perla:

java-regedit2

Hay una variable llamada MI PC\HKEY…\Microsoft\Windows\Cu…\App Paths donde se colocan paths a programas. Me imagino que esto debe estar documentado en alguna parte.  Edité la variable (también se puede colocar los archivos de la versión que se desee en el directorio que aparece en la variable, en mi caso C:\Archivos de programa\Java\jre6\bin. Otros programas dependen de este seteo secreto así que hay que tener cuidado), y listo, resuelto. Funcionó. Funcionó. Funcionó.

Conclusiones

Si estás tratando de ejecutar un programa jnlp y no funciona puede ser una versión incorrecta de Java.Así que prueba las siguientes soluciones en el mismo orden en que se presentan:

1) Desinstala en Panel de Control todas las versiones de Java y utiliza la variable Path. Si no puedes desinstalar alguna versión hazlo a mano borrando los archivos de Windows\System32\java*.exe (uno por uno no se te ocurra hacer un del j*.*)

2) Edita la variable MI PC\HKEY…\Microsoft\Windows\Cu…\App Paths o coloca tu versión de Java en el directorio indicado por esta variable. Esto priva sobre la variable Path, que javaws ignora por completo.

3) Reinstala Windows.

4) Abandona la computación.