2013-04-26 17 views
6

Ho usato per avere più JDK installato sul mio Linux macchina, e mi piace passare da una versione all'altra dalla riga di comando (io ho usato per cambiare la mia JAVA_HOME manualmente):Esiste un gestore delle versioni Java?

Questo è il mio approccio attuale:

I source a ~/.paths nel mio .bashrc.

il .paths contiene tutti i JDK installati sulla mia macchina.

JDK7="~/local/jdk1.7.0_15" 
JDK8="~/local/jdk1.8.0" 
// I use Jdk 7 by default 
JDK_HOME=$JDK7;  
// including $JDK_HOME/bin to the $PATH 

Quando voglio t passare a JDK8, ho modificare la variabile JDK_HOME per puntare sul JDK8 nel file, e ho re-source mio file .paths.

So che IDE può gestire più JDK facilmente, ma voglio una soluzione simile a rvm.

  • C'è qualche trucco migliore?
  • Meglio di più, Esiste un equivalente per rvm in Java?
+0

possibile duplicato di [gestore versione JVM] (http://stackoverflow.com/questions/2463936/jvm-version-manager) –

risposta

3

C'è jdk_switcher anche se è abbastanza statico per alcuni percorsi ubuntu - dovrebbe essere facile modificarlo per l'esecuzione da altri percorsi.

C'è un piano per rendere il passaggio RVM 2 supporto più quindi solo Ruby versioni, si può leggere di più su di esso here.

chiunque abbia il link può commentare.

+0

il piano 'RVM2' sembra promettente, grazie a @mpapis per la menzione. – tarrsalah

0

È possibile installare tutte le versioni Java che si desidera. Basta installare su una cartella di tua scelta e utilizzare alcune convenzioni.

Se si vuole fare uso di una volta di una particolare versione eseguirlo con un percorso completo (per esempio):

>C:\java\jdk-6u35\bin\java.exe 

o

>/java/jdk-6u35/bin/java.exe 

Se si desidera modificare a poco usalo, cambia il percorso per inserire la versione che desideri in primo piano. Il percorso potrebbe essere simile a quello mostrato sopra.

Assicurarsi di modificare anche JAVA_HOME e qualsiasi altra impostazione dell'ambiente che include un riferimento alla posizione java.

Si noti che alcuni strumenti dispongono di una configurazione interna su quale versione java utilizzare. Eclipse è un buon esempio. Devi creare un elenco delle JVM e quindi selezionarne uno per ciascun progetto o per tutti i progetti.

1

Non penso che ci sia una tale soluzione. Vedere questo question a una soluzione con collegamenti simbolici.

0

Ora, sto usando jdk-manager, un piccolo script di bash per gestire più installazioni JDKS.

0

Ho scritto il mio script per gestire le versioni java. Uso alcuni siti che richiedono Oracle Java e di solito l'ultima versione, quindi non posso usare apt/aptitude e quindi non posso usare update-alternative o jdk-manager (che usa update-alternative).

Ecco il mio script. Non sviluppo professionalmente, quindi probabilmente è un disastro, ma serve ai miei scopi. Considera solo le versioni java memorizzate in/usr/lib/jvm.

#!/bin/bash 

# the proper way.... 
# + update: update-alternatives only works for versions installed by apt or aptitude 
# ... same for jdk-manager (uses update-alternatives to do the heavy lifting) 
#echo "The proper way is:" 
#echo "$ update-alternatives --config java" 

#exit 

# the rest is (no longer) depreciated.... 

echo "The current default java is $(readlink --canonicalize `which java`)" 

PS3='Select Java to install: ' 
options=($(find /usr/lib/jvm -iname java)) 
noptions=${#options[@]} 
((loption=noptions-1)) 
options[${#options[@]}]="Quit" 

select opt in "${options[@]}" 
do 
    for i in $(seq 0 $loption); do 
    [ "$opt" == "${options[$i]}" ] && \ 
     javapath=${options[$i]} 
    done 
    if [ "$javapath" ]; then 
    break 
    fi 
    if [ "$opt" == "Quit" ]; then 
     echo "Nothing installed."; 
     exit 
    else 
     echo "Invalid option. Try another one."; 
     continue 
    fi 
done 


# remove the old link (might be superfluous) 
#rm -vf -- "$link" 

# set new link (symbolic, force, verbose) 
sudo ln -sTfv "$javapath" "/usr/bin/java" 

default_java_dir=$(echo "$javapath" | grep --only-matching --regexp="\/usr\/lib\/jvm\/[^\/]*") 
sudo ln -sTfv "$default_java_dir" "/usr/lib/jvm/default-java" 

java_bin_dir=$(echo "$javapath" | sed 's/[^\/]*$//') 
echo $java_bin_dir 
[ -f "${java_bin_dir}javac" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javac" 
[ -f "${java_bin_dir}javadoc" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javadoc" 
[ -f "${java_bin_dir}javafxpackager" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javafxpackager" 
[ -f "${java_bin_dir}javah" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javah" 
[ -f "${java_bin_dir}javap" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javap" 
[ -f "${java_bin_dir}java-rmi.cgi" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}java-rmi.cgi" 
[ -f "${java_bin_dir}java_vm" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}java_vm" 
[ -f "${java_bin_dir}javaws" ] && sudo ln -sfv -t "/usr/bin" "${java_bin_dir}javaws" 

find_dir=$(dirname "$java_bin_dir") 
pluginpath=$(find "$find_dir" -name libnpjp2.so) 

#exit 

echo -n "Install $pluginpath as the Java plugin? [y/N]: " 
read 
response=$(echo $REPLY | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/') 

if [ "${response:0:1}" == "Y" ]; then 

    # directories for plugins 

    plugin_dirs="/usr/lib/firefox/plugins 
        /usr/lib/firefox-addons/plugins 
        /usr/lib/mozilla/plugins 
        /opt/google/chrome 
        /home/james/.mozilla/plugins" 


    # first, clean out anything we might have improperly installed already 
    echo "Using 'sudo' to remove any installed java plugins..." 

    for pdir in $plugin_dirs; do 
    sudo rm --verbose --force "$pdir/libjavaplugin_oji.so" "$pdir/libnpjp2.so" "$pdir/IcedTeaPlugin.so" 
    done 

    # okay, trying brute force and awkwardness.... 
    echo "Using 'sudo' to install \"$pluginpath\" in several places..." 

    for pdir in $plugin_dirs; do 
    sudo ln --symbolic --verbose --force "$pluginpath" "$pdir" 
    done 
fi 

exit 
0

Se si utilizza Debian o una distribuzione GNU/Linux derivata, è possibile utilizzare alternative aggiornamento per impostare ciò che è attualmente in esecuzione quando si digita java.

provare a digitare

update-alternatives --display java 

che vi mostrerà quali alternative che avete a disposizione. Questo comando non è distruttivo, cioè non cambia nulla.

man update-alternatives 

Vi darà il manuale per lo strumento. Il comando è probabile che vuole, però, è:

update-alternatives --config java 

che vi darà un modo semplice, interattivo di impostare il programma Java. Puoi anche usare --set se vuoi scriverlo.

Naturalmente, non dovresti fidarti di me senza aver prima gestito l'uomo, perché le persone a volte vanno su Internet e dicono bugie. ;)

MODIFICA: Ho dimenticato, this link introduce alternative di aggiornamento in un modo buono (se Vi specifico).

0

Per Linux, è possibile utilizzare alternative di aggiornamento non solo per impostare i percorsi su java, javac e altri binari, ma anche su JAVA_HOME. Poiché tutto ciò che fa è gestire i collegamenti, è possibile installare un collegamento alle directory jdk e quindi impostare JAVA_HOME in modo che punti a quel collegamento. Ad esempio, "update-alternatives --install/usr/lib/jdk jdk/path/to/jdk8 1" installerà un collegamento alla tua directory jdk. Quindi aggiungi "export JAVA_HOME a/usr/lib/jdk" in .bashrc, .profile, o qualsiasi altro file tu usi per impostare le variabili d'ambiente e qualsiasi alternativa che installi sotto il nome jdk sarà puntata da JAVA_HOME quando passi con l'aggiornamento -alternatives --config jdk. Se stai già utilizzando alternative per gli eseguibili java, puoi usare --slave per creare jdk ogni volta che fa java.

Problemi correlati