Entorno Java múltiple en la misma máquina Linux


9

¿Cuál es la forma más eficiente de instalar múltiples versiones simultáneas de Java JDK en la misma máquina Linux?

Necesito Java5 mientras mi actual Ubuntu 9.10 Karmic viene cargado con Java6.

Sé que podría configurar una máquina virtual para esto, pero estoy buscando alternativas.

Respuestas:


5

Si descarga el binario de Linux desde Sun, puede instalarlo en el directorio que desee. Luego solo haga referencia a esas bibliotecas en su código, y estará listo para comenzar.

Con el instalador binario, creará su propio subdirectorio con nombre (por ejemplo, en su ejemplo, /usr/java/jdk1.5.0_), para que pueda descargar tantos como desee, y se alinearán en el nombre apropiado subdirectorios.

El binario java principal vive en / usr / bin, por lo que si desea reemplazarlo hasta el punto en que cuando escribe "java" accede a su java, y no a ese, simplemente mueva el viejo fuera de / usr / bin y vincule el nuevo allí. Escribir which javate dirá cuál es el java predeterminado en tu sistema.

@jldupont: Cuando pienso en instalaciones simultáneas, pienso en varias versiones instaladas en la misma máquina, que mi método le dará absolutamente. Tengo unas 12 versiones de java instaladas en mi caja de producción para manejar las transmisiones manuales de empresas que aún no se han actualizado.

Sin embargo, cuando escribe "java" solo obtendrá una versión de java, ya que eso es lo que está en '/usr/bin'... Debería escribir algo como' /usr/java/jdk1.5.1/ bin / java 'para obtener un binario java específico que no es el predeterminado del sistema.


Gracias pero necesito instalaciones concurrentes . ¿Cómo puedo hacer eso?
jldupont

Gracias. Ahora he instalado JDK5 en / opt y escribí un script bash para configurar las variables de entorno ... parece que funciona. ¡Pensé que sería más doloroso que esto!
jldupont

@jldupont: En realidad, esa es una de las cosas que me encantan de Linux ... Dado que no hay ningún registro que se interponga en el camino, puede instalar lo mismo cientos de veces, y no es un problema siempre y cuando se esté asegurando para no sobrescribir archivos comunes. Conozco a muchas personas que ejecutan (por ejemplo) múltiples versiones diferentes de Apache. Yo mismo tiendo a ejecutar múltiples versiones de Perl y Java.
Satanicpuppy

1

Simplemente descargue y ejecute el archivo .bin desde Oracle que luego se extrae en una carpeta. Mueva esta carpeta (por ejemplo jdk1.6.0_32) a / usr / lib / jvm y luego el script setjavaque uso para cambiar las versiones de Java. exportSin embargo, debido a las declaraciones, debe permanecer en la misma terminal. Además, algunas herramientas jvm pequeñas pueden no estar configuradas, pero supongo que deberían funcionar en la mayoría de los casos. También soy un novato de shell, así que corrígeme si hay una mejor posibilidad :-) El código para mí es:

#!/bin/bash
# shouldnt be used in a loop, else the path may become too long

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

case "$1" in
  6)
    echo "Setting Java version 6"
    export PATH=/usr/lib/jvm/jdk1.6.0_32/bin:$PATH
    export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_32
    sudo rm /usr/bin/java
    sudo rm /usr/bin/javac
    sudo rm /usr/bin/javadoc
    sudo rm /usr/bin/javah
    sudo rm /usr/bin/javap
    sudo rm /usr/bin/javaws
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/java /usr/bin/java
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javac /usr/bin/javac
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javadoc /usr/bin/javadoc
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javah /usr/bin/javah
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javap /usr/bin/javap
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javaws /usr/bin/javaws
    javac -version    
    java -version
    ;;
  7)
    echo "Setting Java version 7"
    export PATH=/usr/lib/jvm/java-7-openjdk/bin:$PATH
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/
    sudo rm /usr/bin/java
    sudo rm /usr/bin/javac
    sudo rm /usr/bin/javadoc
    sudo rm /usr/bin/javah
    sudo rm /usr/bin/javap
    sudo rm /usr/bin/javaws
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/java /usr/bin/java
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javac /usr/bin/javac
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javadoc /usr/bin/javadoc
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javah /usr/bin/javah
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javap /usr/bin/javap
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javaws /usr/bin/javaws
    javac -version
    java -version
    ;;
  *)
    echo "Usage: $0 {6|7}"

esac
exit 0

Hoffner No estoy seguro de cómo funcionarán las declaraciones de exportación. No funcionan cuando lo intento.
SureshS
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.