Vários ambientes Java na mesma máquina Linux

9

Qual é a maneira mais eficiente de instalar várias versões simultâneas do Java JDK na mesma máquina Linux?

Eu preciso do Java5, enquanto o meu atual Ubuntu 9.10 Karmic vem carregado com o Java6.

Eu sei que eu poderia configurar uma VM para isso, mas estou procurando alternativas.

jldupont
fonte

Respostas:

5

Se você baixar o binário linux da Sun, poderá instalá-lo em qualquer diretório que desejar. Depois, basta referenciar essas bibliotecas no seu código, e você estará pronto.

Com o instalador binário, ele criará seu próprio subdiretório nomeado (por exemplo, em seu exemplo, /usr/java/jdk1.5.0_), para que você possa baixar quantos quiser e eles se alinharão com o nome apropriado subdiretórios.

O binário java principal mora em / usr / bin, portanto, se você quiser substituí-lo até o ponto em que quando digita "java", ele acessa seu java, e não aquele, basta mover o antigo para fora de / usr / bin e vincule seu novo. Digitar which javalhe dirá qual é o java padrão no seu sistema.

@ jldupont: Quando penso em instalações simultâneas, penso em várias versões instaladas na mesma máquina, que meu método absolutamente fornecerá. Tenho cerca de 12 versões do java instaladas na minha caixa de produção para lidar com transferências de empresas que ainda não foram atualizadas.

No entanto, quando você digita "java", obtém apenas uma versão do java, já que é isso que está em '/usr/bin' ... Você precisaria digitar algo como '/usr/java/jdk1.5.1/ bin / java 'para obter um binário java específico que não é o padrão do sistema.

Satanicpuppy
fonte
Obrigado, mas preciso de instalações simultâneas . Como faço isso?
precisa saber é o seguinte
obrigado. Agora instalei o JDK5 em / opt e me escrevi um script bash para configurar as variáveis ​​de ambiente ... parece que funciona. Eu pensei que seria mais doloroso do que isso!
precisa saber é o seguinte
@jldupont: Na verdade, essa é uma das coisas que eu mais amo no Linux ... Como não há registro para atrapalhar, você pode instalar a mesma coisa centenas de vezes, e isso não é um problema, desde que você tenha certeza de que para não sobrescrever arquivos comuns. Conheço muitas pessoas que executam (por exemplo) várias versões diferentes do Apache. Eu próprio tendem a executar várias versões do Perl e Java.
Satanicpuppy
1

Basta baixar e executar o arquivo .bin do oracle, que então se extrai em uma pasta. Mova esta pasta (por exemplo jdk1.6.0_32) para / usr / lib / jvm e, em seguida, o script que setjavaeu uso para alterar as versões java. Por causa das exportinstruções, você precisa permanecer no mesmo terminal. Além disso, algumas pequenas ferramentas jvm podem não estar definidas, mas acho que deve funcionar na maioria dos casos. Também sou um noob shell, por favor, corrija-me se houver uma possibilidade melhor :-) O código para mim é:

#!/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
Konrad Höffner
fonte
Hoffner Não tem certeza de como as instruções de exportação funcionarão. Eles não funcionam quando eu tento.
SureshS