56 votes

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

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

Par exemple, si je veux passer de Java à 7, j'exécute sudo update-alternatives --config java et sélectionnez le 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 vers 7, mais toutes les autres alternatives basées sur OpenJDK 6 n'ont pas été basculées. Bien sûr, je pourrais basculer chacune d'entre elles manuellement ou écrire un script pour le faire, mais je suppose qu'il existe une meilleure façon d'accomplir cela.

72voto

GEdgar Points 2542

L'astuce consiste à utiliser update-java-alternatives (de la java-common paquet).

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

NOTE : La commande ci-dessus a provoqué 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

Ceci est dû au fait que le plugin openjdk n'est pas installé par défaut. Pour corriger cela, exécutez

sudo apt-get install icedtea-7-plugin

et réexécuter update-java-alternatives .

3voto

GEdgar Points 2542

Jbro a posé la même question à http://ubuntuforums.org/showthread.php?t=1817528 et a écrit un script pour cette question,

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    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 qu'il doit y avoir une meilleure manière pour update-alternatives pour gérer cela.

J'ai modifié un peu le code, puisqu'il ne permet pas de faire les changements 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 $1}')
    path=$(echo $line | awk '{print $3}')
    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

2voto

simon coleman Points 131

< TL;DR > update-java-alternatives utilise le fichier .jinfo pour déterminer dont mais s'attend également à ce qu'elles aient été configurées séparément.

Créez un nouveau fichier .jinfo et mettez à jour les entrées alternatives si votre JRE/JDK téléchargé ne passe pas avec update-java-alternatives

[Détails]

Pour le configurer manuellement :

  1. Décompressez votre nouveau jdk à côté du jdk existant dans /usr/lib/jvm/

  2. Générer un .jdkname.jinfo en dupliquant un autre fichier .jinfo dans le dossier (ou prenez-en un d'une autre installation Ubuntu : vous recherchez le modèle autant qu'autre chose).

    Le nom de fichier . jdkname .jinfo doit correspondre au nom de dossier du jdk.

    Modifiez le contenu pour définir l'en-tête (noms) et les chemins d'accès aux fichiers (entrées de programme) pour correspondre à votre nouvelle installation.

    Supprimez toutes les lignes se référant à des programmes omis dans votre version et ajoutez des lignes pour les nouveaux programmes en /bin

  3. Générez des alternatives pour tous les programmes présents dans votre paquet .jinfo avec ce modèle :

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100

    (Plusieurs réponses connexes ont scripté ceci à partir du contenu de /bin ou vous pouvez effectuer une recherche/remplacement regexp sur votre fichier .jinfo pour générer les commandes script).

    Notez que 100 est juste la priorité qui est prise en compte lors de la définition de la version du jdk en utilisant le drapeau auto.

  4. Vérifiez les alternatives java et passez à l'utilisation du JDK.

    update-java-alternatives -l  
    update-java-alternatives -s jdkname  

    Notez que certains JDKs n'incluent pas le JRE, alors ajoutez-le ou supprimez ces entrées jinfo.

1voto

SteveQian Points 11

Pour Oracle JVM, exécutez ceci :

sudo update-java-alternatives -s java-7-oracle

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X