Er der en måde at opdatere alle Java-relaterede alternativer på?
Tricket er at bruge update-java-alternatives
(fra java-common
pakke).
Så for at gå efter OpenJDK 6 til 7 brugte jeg update-java-alternatives -l
for at få en liste over Java-alternativer og derefter brugt sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
til JDK.
BEMÆRK:Kommandoen ovenfor gav følgende fejl,
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
Dette skyldes, at openjdk-plugin'et ikke er installeret som standard. For at rette kør
sudo apt-get install icedtea-7-plugin
og kør update-java-alternatives
igen .
jbro stillede det samme spørgsmål på http://ubuntuforums.org/showthread.php?t=1817528 og skrev et script til dette problem,
#!/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
Hvis der ikke er et bedre svar, virker dette som en solid løsning, men jeg går ud fra, at der må være en bedre måde for update-alternatives
at håndtere dette.
Jeg redigerede koden lidt, da den ikke lader dig foretage ændringerne, før du installerer dem. Jeg tilføjede yderligere to linjer som følger...
#!/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
Opret en ny .jinfo-fil og opdater alternativer, hvis din downloadede JRE/JDK ikke skifter over med update-java-alternatives
[Detaljer]
Sådan konfigureres det manuelt:
-
Dekomprimer din nye jdk sammen med den eksisterende jdk i
/usr/lib/jvm/
-
Generer en .jdkname.jinfo fil ved at duplikere en anden .jinfo-fil i mappen (eller tag en fra en anden Ubuntu-installation:du er lige så meget efter skabelonen som noget andet).
Filnavnet .jdkname .jinfo skal matche jdk-mappenavnet.
Rediger indholdet for at indstille overskriften (navnene) og filstierne (programposter), så de passer til din nye installation.
Fjern alle linjer, der henviser til programmer, der er udeladt i din version, og tilføj linjer for nye programmer i
/bin
-
Generer alternativer til alle programmerne nu i din .jinfo-pakke med denne skabelon:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100
(Flere relaterede svar har scriptet dette fra indholdet af /bin, eller du kan udføre regexp-søgning/erstat på din .jinfo-fil for at generere scriptkommandoerne.)
Bemærk, at 100 kun er den prioritet, der tages i betragtning, når du indstiller jdk-versionen ved hjælp af autoflaget.
-
Tjek java-alternativerne og skift til at bruge JDK.
update-java-alternatives -l update-java-alternatives -s jdkname
Bemærk, at nogle JDK'er ikke inkluderer JRE, så enten tilføje det eller fjerne disse jinfo-indgange.