Czy istnieje sposób na szybkie przełączenie wszystkich alternatyw związanych z Javą update-alternatives
?
Na przykład, jeśli chcę przełączyć Java na 7, uruchamiam sudo update-alternatives --config java
i wybieram Java 7 OpenJdk. Ale jeśli uruchomię update-alternatives --get-selections | grep java
, otrzymam następujące informacje,
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
Jak widać, moja alternatywa Java została przełączona na 7, ale każda inna alternatywa oparta na OpenJDK 6 nie została przełączona. Pewnie, że mogę zmienić każdy z nich ręcznie lub napisać skrypt, aby to zrobić, ale zakładam, że jest lepszy sposób na osiągnięcie tego.
źródło
update-java-alternatives
zmienia wszystkie inne alternatywy Java, nawet jeśli ustawienie wtyczki powoduje błąd.update-java-alternatives --set java-1.8.0-openjdk-amd64
nadal mamdefault-java -> /usr/lib/jvm/java-7-oracle
. Czy jest to spowodowaneno alternatives for mozilla-javaplugin.so
błędem? Jak mogę to również zmienić?jbro zadał to samo pytanie na http://ubuntuforums.org/showthread.php?t=1817528 i napisał skrypt dla tego problemu,
Jeśli nie ma lepszej odpowiedzi, wydaje się to solidnym obejściem, ale zakładam, że musi istnieć lepszy sposób,
update-alternatives
aby sobie z tym poradzić.Zmodyfikowałem trochę kod, ponieważ nie pozwala on na wprowadzanie zmian przed ich instalacją. Dodałem dwie kolejne linie w następujący sposób ...
źródło
W przypadku Oracle JVM uruchom to:
źródło
<TL; DR> update-java-alternatives używa pliku .jinfo do ustalenia, które alternatywy się przełączają, ale oczekuje również, że zostaną skonfigurowane osobno.
Utwórz nowy plik .jinfo i wpisy modyfikujące aktualizację, jeśli pobrany JRE / JDK nie przełącza się z aktualizacją-java-alternatives
[Detale]
Aby skonfigurować go ręcznie:
Rozpakuj nowy jdk obok istniejącego jdk w
/usr/lib/jvm/
Wygeneruj plik .jdkname.jinfo , duplikując inny plik .jinfo w folderze (lub pobierz jeden z innej instalacji Ubuntu: jesteś za szablonem tak samo, jak cokolwiek innego).
Nazwa pliku Plik jdkname .jinfo musi być zgodny z nazwą folderu jdk.
Zmodyfikuj zawartość, aby ustawić nagłówek (nazwy) i ścieżki do plików (wpisy programu) w celu dopasowania do nowej instalacji.
Usuń wszystkie wiersze odnoszące się do programów pominiętych w twojej wersji i dodaj wiersze dla nowych programów w
/bin
Wygeneruj alternatywy dla wszystkich programów teraz w pakiecie .jinfo za pomocą tego szablonu:
(Kilka powiązanych odpowiedzi zapisało to w skrypcie z zawartości pliku / bin lub możesz przeprowadzić wyszukiwanie / wyrażenie regularne w pliku .jinfo, aby wygenerować polecenia skryptu).
Zauważ, że 100 jest tylko priorytetem branym pod uwagę przy ustawianiu wersji jdk za pomocą flagi auto.
Sprawdź alternatywy java i przełącz się na używanie JDK.
Zauważ, że niektóre JDK nie zawierają środowiska JRE, więc dodaj go lub usuń wpisy jinfo.
źródło