Ambiente Java multiplo sulla stessa macchina Linux


9

Qual è il modo più efficiente per installare più versioni JDK Java simultanee sulla stessa macchina Linux?

Ho bisogno di Java5 mentre il mio attuale Ubuntu 9.10 Karmic viene caricato con Java6.

So che potrei configurare una VM per questo, ma sto cercando alternative.

Risposte:


5

Se scarichi il binario Linux da Sun, puoi installarlo in qualunque directory ti piaccia. Quindi fai riferimento a quelle librerie nel tuo codice e sei a posto.

Con il programma di installazione binario, creerà la propria sottodirectory denominata (ad es. Nel tuo esempio, /usr/java/jdk1.5.0_), in modo da poter scaricare quanti ne vuoi e si schiereranno in modo appropriato sub-drectories.

Il binario java principale vive in / usr / bin, quindi se vuoi sostituirlo al punto in cui quando digiti "java" accede al tuo java, e non a quello, sposta semplicemente il vecchio da / usr / bin e collega il tuo nuovo lì dentro. La digitazione which javati dirà qual è il java predefinito sul tuo sistema.

@jldupont: Quando penso a installazioni simultanee, penso a più versioni installate sulla stessa macchina, che il mio metodo ti darà assolutamente. Ho circa 12 versioni di java installate sul mio box di produzione per gestire i manuali di aziende che non sono ancora stati aggiornati.

Tuttavia, quando digiti "java" otterrai solo una versione di java, dato che si trova in '/usr/bin'... Dovresti digitare qualcosa come' /usr/java/jdk1.5.1/ bin / java 'per ottenere un binario java specifico che non è l'impostazione predefinita del sistema.


Grazie ma ho bisogno di installazioni simultanee . Come lo faccio?
jldupont,

Grazie. Ora ho installato JDK5 in / opt e mi sono scritto uno script bash per impostare le variabili di ambiente ... sembra che funzioni. Ho pensato che sarebbe stato più doloroso di così!
jldupont,

@jldupont: In realtà questa è una delle cose che adoro di Linux ... Dal momento che non c'è alcun registro da intralciare, puoi installare la stessa cosa cento volte, e non è un problema finché ti assicuri per non sovrascrivere file comuni. Conosco molte persone che gestiscono (ad esempio) più versioni diverse di Apache. Io stesso tendo a eseguire più versioni di Perl e Java.
Satanicpuppy,

1

Basta scaricare ed eseguire il file .bin da Oracle che poi si estrae in una cartella. Sposta questa cartella (ad es. jdk1.6.0_32) In / usr / lib / jvm e poi lo script setjavache uso per cambiare le versioni di java. A causa delle exportdichiarazioni, tuttavia, è necessario rimanere nello stesso terminale. Inoltre, alcuni piccoli strumenti jvm potrebbero non essere impostati, ma credo che dovrebbe funzionare nella maggior parte dei casi. Inoltre sono un noob di shell, quindi per favore correggimi se c'è una possibilità migliore :-) Il codice per me è:

#!/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 Non sono sicuro di come funzioneranno le dichiarazioni di esportazione. Non funzionano quando provo.
Suresh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.