2008-11-07 30 views
62

Tenemos un par de aplicaciones ejecutándose en Java 5 y ahora queremos presentar una aplicación basada en Java 6. ¿Pueden ambas versiones de Java vivir juntas bajo Windows?Múltiples versiones de Java que se ejecutan simultáneamente en Windows

¿Hay algún panel de control para configurar la versión de Java adecuada para diferentes aplicaciones, o de cualquier otra manera para configurar, qué versión de Java se utilizará para ejecutar esa aplicación en particular?

Respuesta

52

Por supuesto, puede usar múltiples versiones de Java en Windows. Y diferentes aplicaciones pueden usar diferentes versiones de Java. ¿Cómo se inició su aplicación? Por lo general, usted tiene un archivo de lote, si hay algo así como

java ... 

Esto buscará el ejecutable Java utilizando la variable PATH. Entonces, si Java 5 está primero en la RUTA, tendrá problemas para ejecutar una aplicación Java 6. A continuación, debe modificar el archivo de proceso por lotes para usar una determinada versión de Java, p. definiendo una variable de entorno JAVA6HOME con el valor C:\java\java6 (si Java 6 está instalado en este directorio) y cambiar el archivo por lotes llamando

%JAVA6HOME%\bin\java ... 
+8

En Windows, para detener el instalador de Java que reemplaza su instalación de Java existente (primero instalado), debe pásalo STATIC = 1 argumento, es decir, ejecutar desde la línea de comando "jre-6u24-windows-i586-s.exe/STATIC = 1" –

+3

Cuando lo hago "jdk-6u27-windows-x64.exe/STATIC = 1" en Windows 7 64, no se instala, solo muestra una ventana emergente que muestra el uso de msiexec. – yetimoner

+6

Según [este documento de Oracle] (http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jre-installer-options.html) en realidad es 'jdk -... exe STATIC = 1'. Intenté esto y funcionó. – Matt

11

Es absolutamente posible instalar lado a lado varias versiones de JRE/JDK. Además, no tiene que hacer nada especial para que eso suceda, ya que Sun está creando una carpeta diferente para cada uno (en Archivos de programa).

No hay un panel de control para verificar qué JRE funciona para cada aplicación. Básicamente, el JRE que funcionará sería el primero en su variable de entorno PATH. Puede cambiar eso, o la variable JAVA_HOME, o crear archivos cmd/bat específicos para iniciar las aplicaciones que desee, cada una con un JRE diferente en la ruta.

+2

No creo que esto sea cierto para Windows. – cmcginty

+0

@Casey, ¿a qué parte te refieres? ¿Por qué no es verdad? – Pacerier

+0

[Esta respuesta] (http://stackoverflow.com/a/5493139/3182836) explica el problema. El registro de Windows se usa para ubicar la versión predeterminada de java. – binarysubstrate

1

Debería ser posible cambiar la configuración de la variable de entorno JAVA_HOME de forma diferente para aplicaciones específicas.

Al comenzar desde la línea de comandos o desde un script por lotes, puede usar set JAVA_HOME=C:\...\j2dskXXX para cambiar el entorno JAVA_HOME.

Es posible que también necesite cambiar la variable de entorno PATH para usar el binario Java correcto. Para hacer esto, puede usar set PATH=%JAVA_HOME%\bin;%PATH%.

1

La invocación de Java con "java -version: 1.5", etc. debe ejecutarse con la versión correcta de Java. (Obviamente sustituir a 1,5 con la versión que desea.)

Si Java está instalado correctamente en Windows hay caminos a la máquina virtual para cada versión almacenada en el registro que se utiliza para que no se necesita para enredar con las versiones de entorno en Windows.

+0

Creo que esto solo funciona con JRE "públicos". Excelente en máquinas cliente, un poco molesto para los desarrolladores que no instalan el JRE público. Mucho mejor que un archivo por lotes. –

1

Si usa Java Web Start (puede iniciar aplicaciones desde cualquier URL, incluso el sistema de archivos local) se ocupará de encontrar la versión correcta para su aplicación.

8

Me quedé horrorizado por la torpeza de las ideas CLASSPATH, JAVA_HOME y PATH, en Windows, para hacer un seguimiento de los archivos Java. Llegué aquí, debido a múltiples JRE, y cómo contentarme con él. Sin información regurgitante, de un tipo mucho más inteligente que yo, prefiero apuntar a su artículo sobre este tema, que para mí, lo resuelve perfectamente.

artículo por: Ted Neward: Multiple Java Homes: Giving Java Apps Their Own JRE

Con el crecimiento exponencial de Java como un lenguaje de programación del lado del servidor ha llegado un equivablent crecimiento exponencial de las herramientas de desarrollo Java, ambientes, marcos y extensiones. Desafortunadamente, no todas estas herramientas funcionan bien juntas bajo la misma instalación Java VM. Algunos requieren un entorno compatible con Servlet 2.1, otros requieren 2.2. Algunos solo se ejecutan bajo JDK 1.2 o superior, algunos bajo JDK 1.1 (y no más alto). Algunos requieren los paquetes "com.sun.swing" de pre-Swing 1.0 días, otros requieren los nombres de los paquetes "javax.swing".

Peor aún, este problema se puede encontrar incluso dentro de la empresa corporativa, como los sistemas desarrollados utilizando Java desde hace apenas seis meses puede de repente "no funciona" debido a la instalación de alguna extensión de Java requerido por una nueva (aparentemente no relacionado) lanzamiento de la aplicación. Esto puede complicar la implementación de las aplicaciones Java en toda la corporación y llevar a los clientes a preguntarse por qué, cinco años después del inicio de los infames problemas de "Instalar-este-app-breaks-my-system" comenzó con los esquemas DLL de Microsoft, todavía no hemos progresado mucho más allá de eso. (De hecho, la nueva iniciativa .NET realidad busca solucionar el problema infame "DLL Hell" se acaba de describir.)

En este documento se describe cómo configurar una instalación de Java tal que una aplicación dada recibe su propia, privada , JRE, permitiendo que múltiples entornos Java coexistan sin tener clientes ( administradores) dementes ...

+4

+1 por "horrorizado por la torpeza de [Java]". – Pacerier

+2

Creo que el enlace dado en la respuesta anterior ya no existe. Encontré el mismo artículo aquí http://docplayer.net/15645854-Multiple-java-homes-giving-java-apps-their-own-jre-a -javageeks-com-white-paper.html –

2

O use enlaces. Si bien es bastante desagradable actualizar PATH en un entorno en ejecución, es fácil recrear un enlace a una nueva versión de JRE/JDK. Por lo tanto:

  • instalar diferentes versiones de JDK que desea utilizar
  • crear un enlace a esa carpeta ya sea por junction o por comando integrado MKLINK
  • establecer la ruta de acceso al enlace
  • Si otra se va a utilizar la versión de java, eliminar el enlace, crear uno nuevo, PATH/JAVA_HOME/scripts codificados permanecen intactos
Cuestiones relacionadas