Existe-t-il un moyen de mettre à jour toutes les alternatives liées à Java?

48

Existe-t-il un moyen de basculer rapidement toutes les alternatives liées à Java en utilisant update-alternatives ?

Par exemple, si vous souhaitez passer de Java à 7, j'exécute sudo update-alternatives --config java et sélectionnez Java 7 OpenJdk. Mais si je lance update-alternatives --get-selections | grep java , j'obtiens ce qui suit,

appletviewer                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/appletviewer
extcheck                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/extcheck
idlj                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/idlj
itweb-settings                 auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/itweb-settings
jar                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jar
jarsigner                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jarsigner
java                           manual   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
javac                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javac
javadoc                        auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javadoc
javah                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javah
javap                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javap
javaws                         auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws
jconsole                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jconsole
jdb                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jdb
jexec                          auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jexec
jhat                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jhat
jinfo                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jinfo
jmap                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jmap
jps                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jps
jrunscript                     auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jrunscript
jsadebugd                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jsadebugd
jstack                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstack
jstat                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstat
jstatd                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstatd
keytool                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/keytool
native2ascii                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/native2ascii
orbd                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/orbd
pack200                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/pack200
policytool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/policytool
rmic                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/rmic
rmid                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmid
rmiregistry                    auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmiregistry
schemagen                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/schemagen
serialver                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/serialver
servertool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/servertool
tnameserv                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/tnameserv
unpack200                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/unpack200
wsgen                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsgen
wsimport                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsimport
xjc                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/xjc

Comme vous pouvez le constater, mon alternative Java a été basculée sur 7, mais toute autre alternative basée sur OpenJDK 6 n’a pas été modifiée. Bien sûr, je pourrais changer chacun manuellement ou écrire un script pour le faire, mais je suppose qu'il existe un meilleur moyen d'y parvenir.

    
posée James McMahon 24.05.2012 - 21:37
la source

3 réponses

68

L'astuce consiste à utiliser update-java-alternatives (à partir du package java-common ).

Donc, pour OpenJDK 6 à 7, j'ai utilisé update-java-alternatives -l pour obtenir une liste d'alternatives Java, puis j'ai utilisé sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 au JDK.

REMARQUE: la commande ci-dessus a généré les erreurs suivantes,

update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

C'est parce que le plugin openjdk n’est pas installé par défaut. Pour réparer l'exécution

sudo apt-get install icedtea-7-plugin

et relancez update-java-alternatives .

    
réponse donnée James McMahon 24.05.2012 - 21:48
la source
3

jbro a posé la même question à lien et a écrit un script pour ce numéro,

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print }')
    path=$(echo $line | awk '{print }')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

S'il n'y a pas de meilleure réponse, cela semble être une solution de contournement solide, mais je suppose que update-alternatives doit mieux gérer cette situation.

J'ai édité le code un peu, car il ne vous permet pas de faire les modifications avant de les installer. J'ai ajouté deux lignes supplémentaires comme suit ...

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print }')
    path=$(echo $line | awk '{print }')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
echo "-> update-alternatives --install /usr/bin/$alternative $alternative $newpath 1"
update-alternatives --install /usr/bin/$alternative $alternative $newpath 1
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done
    
réponse donnée James McMahon 24.05.2012 - 21:42
la source
1

Pour Oracle JVM, exécutez ceci:

sudo update-java-alternatives -s java-7-oracle
    
réponse donnée SteveQian 20.08.2016 - 03:43
la source

Lire d'autres questions sur les étiquettes