Existe-t-il un moyen de basculer rapidement sur toutes les alternatives liées à Java en utilisant update-alternatives
?
Par exemple, si vous voulez basculer Java sur 7, je lance 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 sur 7, mais toutes les autres alternatives basées sur OpenJDK 6 n'ont pas été basculées. Bien sûr, je pourrais commuter chacun manuellement ou écrire un script pour le faire, mais je suppose qu’il existe un meilleur moyen de le faire.
L'astuce consiste à utiliser update-Java-alternatives
(à partir du paquetage Java-common
).
Donc, pour OpenJDK 6 à 7, j’ai utilisé update-Java-alternatives -l
afin d’obtenir une liste de Java alternatives, puis j’ai utilisé Sudo update-Java-alternatives -s Java-1.7.0-openjdk-AMD64
dans le JDK.
Remarque: la commande ci-dessus a jeté 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
En effet, le plugin openjdk n'est pas installé par défaut. Pour réparer
Sudo apt-get install icedtea-7-plugin
et relancez update-Java-alternatives
.
jbro a posé la même question à l'adresse http://ubuntuforums.org/showthread.php?t=1817528 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 $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 exister un meilleur moyen pour update-alternatives
de gérer cela.
J'ai un peu modifié le code, car il ne vous permet pas de faire les modifications avant de les installer. J'ai ajouté deux autres lignes 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
Pour Oracle JVM, lancez ceci:
Sudo update-Java-alternatives -s Java-7-Oracle
<TL; DR> pdate-Java-alternatives utilise le fichier .jinfo pour déterminer les alternatives à utiliser, mais attend également qu'ils aient été configurés séparément.
Créez un nouveau fichier .jinfo et des entrées update-alterntive si votre JRE/JDK téléchargé ne bascule pas avec update-Java-alternatives
[Détails]
Pour le configurer manuellement:
Décompressez votre nouveau jdk avec le jdk existant dans /usr/lib/jvm/
Générez un fichier .jdkname.jinfo en dupliquant un autre fichier .jinfo dans le dossier (ou récupérez-le à partir d'une autre installation Ubuntu: vous recherchez le modèle autant que tout le reste).
Le nom du fichier .jdkname. Jinfo doit correspondre au nom de dossier jdk.
Modifiez le contenu pour que l'en-tête (noms) et les chemins de fichier (entrées de programme) correspondent à votre nouvelle installation.
Supprimez toutes les lignes faisant référence à des programmes omis dans votre version et ajoutez des lignes pour les nouveaux programmes dans /bin
Générez des alternatives pour tous les programmes maintenant 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 écrit cela à partir du contenu de/bin ou vous pouvez effectuer une recherche/un remplacement d'expression régulière sur votre fichier .jinfo pour générer les commandes de script.)
Notez que 100 n’est que la priorité prise en compte lors de la définition de la version de jdk à l’aide du drapeau automatique.
Vérifiez les alternatives Java et utilisez le JDK.
update-Java-alternatives -l
update-Java-alternatives -s jdkname
Notez que certains JDK n'incluent pas le JRE, aussi ajoutez-le ou supprimez ces entrées jinfo.