Java >> Java tutorial >  >> Tag >> native

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

update-java-alternatives bruger .jinfo-filen til at bestemme hvilken alternativer til at skifte på tværs, men forventer også, at de er blevet konfigureret separat.

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:

  1. Dekomprimer din nye jdk sammen med den eksisterende jdk i /usr/lib/jvm/

  2. 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

  3. 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.

  4. 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.


Java tag