Есть ли способ быстро переключаться между всеми альтернативами, связанными с Java, используя update-alternatives
?
Например, если вы хотите переключить Java на 7, я запускаю sudo update-alternatives --config java
и выбираю Java 7 OpenJdk. Но если я бегу, update-alternatives --get-selections | grep java
я получаю следующее,
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
Как видите, моя альтернатива Java была переключена на 7, но любая другая альтернатива, основанная на OpenJDK 6, не была переключена. Конечно, я мог бы переключать каждый из них вручную или написать скрипт для этого, но я предполагаю, что есть лучший способ сделать это.
источник
update-java-alternatives
изменяет все другие альтернативы Java, даже если настройка плагина выдает ошибку.update-java-alternatives --set java-1.8.0-openjdk-amd64
меня еще естьdefault-java -> /usr/lib/jvm/java-7-oracle
. Это вызваноno alternatives for mozilla-javaplugin.so
ошибкой? Как я могу это изменить?jbro задал тот же вопрос на http://ubuntuforums.org/showthread.php?t=1817528 и написал сценарий для этой проблемы,
Если нет лучшего ответа, это выглядит как надежный обходной путь, но я полагаю, что должен быть лучший способ
update-alternatives
справиться с этим.Я немного отредактировал код, так как он не позволяет вносить изменения перед их установкой. Я добавил еще две строки следующим образом ...
источник
Для Oracle JVM запустите это:
источник
<TL; DR> update-java-alternatives использует файл .jinfo, чтобы определить, какие альтернативы переключаться, но также ожидает, что они были настроены отдельно.
Создайте новый файл .jinfo и записи с альтернативой обновления, если загруженный JRE / JDK не переключается с альтернативами update-java
[Подробности]
Чтобы настроить его вручную:
Распакуйте новый JDK вместе с существующим JDK в
/usr/lib/jvm/
Создайте файл .jdkname.jinfo , продублировав другой файл .jinfo в папке (или захватите его из другой установки Ubuntu: вам нужен шаблон так же, как и все остальное).
Имя файла jdkname .jinfo должно совпадать с именем jdk foldername.
Измените содержимое, чтобы задать заголовок (имена) и пути к файлам (записи программы) в соответствии с вашей новой установкой.
Удалите все строки, относящиеся к программам, опущенным в вашей версии, и добавьте строки для новых программ в
/bin
Создайте альтернативы для всех программ, которые теперь есть в вашем пакете .jinfo, с помощью этого шаблона:
(Несколько связанных ответов написали это из содержимого / bin, или вы можете выполнить поиск / замену регулярного выражения в вашем файле .jinfo для генерации команд сценария.)
Обратите внимание, что 100 - это просто приоритет, который учитывается при установке версии jdk с использованием флага auto.
Проверьте альтернативы Java и переключитесь на использование JDK.
Обратите внимание, что некоторые JDK не содержат JRE, поэтому либо добавьте его, либо удалите эти записи jinfo.
источник