update-java-альтернативы против обновления-альтернатив --config java
На Ubuntu 12.04 LTS я установил Sun JDK7, Eclipse и Arduino IDE. Я хочу, чтобы Arduino использовал OpenJDK 6, а Eclipse - Sun JDK 7.
Из моего понимания мне нужно вручную выбрать, какую Java использовать, прежде чем запускать каждое приложение. Это привело меня к update-java-alternatives -l
команда. Когда я запускаю это, я вижу только следующее:
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
но когда я бегу update-alternatives --config java
Я вижу следующее:
*0 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java auto mode
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java manual mode
2 /usr/lib/jvm/jdk1.7.0/bin/java manual mode
3 /usr/lib/jvm/jre1.7.0/bin/java manual mode
Я не понимаю, почему update-java-alternatives
не отображает те же 3 варианта. Я также не понимаю, как переключаться между OpenJDK6 и JDK7. Как я могу использовать OpenJDK6 для разработки Arduino и Sun JDK7 для разработки Eclipse/Android?
4 ответа
sudo update-alternatives --config java
Настраивает значение по умолчанию для программы "Java". Это Java VM.
sudo update-alternatives --config javac
Настраивает компилятор Java по умолчанию.
Вы также можете видеть это, потому что первая команда перечисляет много папок "JRE" (Java Runtime Environment), а Программа просто называется "java".
Если я проверю, какая версия используется, введя командуjava -version
или жеjavac -version
Я вижу, что каждая команда меняет используемую программу.
Однако, используя update-java-alternatives
с версией JDK изменяет обе программы для меня. Используя первые команды, вы можете использовать Java VM и Java Compiler из разных JDK.
Так что, кажется, вам нужно установить openjdk-7-jdk
пакет, а также. Похоже, вы только установили openjdk-7-jre
,
Что касается переключения для разных сред разработки:
Вы говорите о запуске самой IDE с разными версиями Java или об использовании разных версий в IDE для компиляции и запуска приложения?
Для 1.: Вы можете указать, какую JVM использовать в eclipse.ini, как описано здесь. Я не знаю, как это сделать для Arduino IDE.
Для 2.: В Eclipse вы можете выбрать JRE/JDK для использования в Window -> Preferences -> Java -> Installed JRE. А в Java -> Compiler вы можете выбрать более старую совместимость с Java, если хотите.
РЕДАКТИРОВАТЬ: Эта страница DigitalOcean также имеет очень хорошее объяснение всего, что связано с Java в Ubuntu.
update-java-alternatives
это программа для обновления альтернатив для jre/jdk
установок.
update-alternatives
система управления символическими ссылками для Linux (я уверен, что здесь мало новостей).
Вы можете и действительно должны использовать оба update-java-alternatives
а также update-alternatives
все вместе.
Во-первых, убедитесь, что все альтернативы настроены правильно. java и javac - это всего лишь несколько. Есть javadoc
, rmic
, serialver
и другие, подставляя вышеуказанные переменные для: native2ascii
а также /opt/jdk1.8.0_40/bin/native2ascii
должен сообщить, если альтернатива установлена и / или выбрана.
Когда все альтернативы настроены, вы можете создать ссылки в /usr/lib/jvm
к вашей ручной установке.
Для того, чтобы настроить update-java-alternatives
Вы должны использовать скрытый файл с тем же именем, что и ваш каталог, но с префиксом. (Точка).
Надеюсь это поможет.
Список используемой литературы
man -S 8 update-java-alternatives
http://tech.lanesnotes.com/2008/03/using-alternatives-in-linux-to-use.html
https://stackoverflow.com/questions/6477415/how-to-set-oracles-java-as-the-default-java-in-ubuntu
Просто примечание (слишком большое для комментария). Если вам нужно автоматически переключиться на Java 8 (компилятор 1.8), в однострочном режиме, например, для скрипта или набора тестов непрерывной интеграции, вы можете запустить
sudo update-java-alternatives -s $(sudo update-java-alternatives -l | grep 8 | cut -d " " -f1) || echo '.'
Он автоматически выберет любую доступную версию Java 8 и установит ее с помощью команды .
The
|| echo '.'
в конце просто гарантирует, что команда вернет успех, потому что странно
update-java-alternatives
по умолчанию возвращает ошибку (1). Вы можете пропустить его, если он вам не нужен для набора тестов.
Я проверил содержимое/usr/sbin/update-java-alternatives
и это просто скрипт, который вызываетupdate-alternatives
для каждой записи в файле/usr/lib/jvm/.<jname>.jinfo
.
Если у вас нет такого файла для новой установки JDK, вы можете создать собственный сценарий установки следующим образом. Предположим, вы только что установили JDK 17 на Ubuntu через пакет Debian, и у вас возникла следующая ситуация:
$ update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
* 2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
3 /usr/lib/jvm/jdk-13.0.2/bin/java 1081 manual mode
^CTRL-C
Создайте следующий скрипт:
$ sudo nano jdk-17.0.6.install-alternatives.sh
со следующим содержимым, убедившись, что вы подставили правильные значения дляJAVADIR
,PRIORITY
иBINDIR
переменные в соответствии с конфигурацией вашей системы:
#!/bin/bash
JAVADIR=/usr/lib/jvm/jdk-17
PRIORITY=1081
BINDIR=/usr/bin
find "$JAVADIR" -perm 755 -type f | while read FP
do
FN=$(basename $FP)
echo "update-alternatives --install /usr/bin/$FN $FN $FP $PRIORITY"
update-alternatives --install /usr/bin/$FN $FN $FP $PRIORITY
done
Это выберет все исполняемые файлы в вашем новом пакете Java, даже те, которые находятся в каталогах, отличных отbin/
(т.е.lib/
).
Сделайте скрипт исполняемым:
$ chmod 755 jdk-17.0.6.install-alternatives.sh
затем запустите его как root:
$ sudo ./jdk-17.0.6.install-alternatives.sh
update-alternatives --install /usr/bin/jspawnhelper jspawnhelper /usr/lib/jvm/jdk-17/lib/jspawnhelper 1081
update-alternatives --install /usr/bin/jexec jexec /usr/lib/jvm/jdk-17/lib/jexec 1081
update-alternatives --install /usr/bin/keytool keytool /usr/lib/jvm/jdk-17/bin/keytool 1081
update-alternatives --install /usr/bin/jmod jmod /usr/lib/jvm/jdk-17/bin/jmod 1081
update-alternatives --install /usr/bin/jimage jimage /usr/lib/jvm/jdk-17/bin/jimage 1081
update-alternatives --install /usr/bin/jstat jstat /usr/lib/jvm/jdk-17/bin/jstat 1081
update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/jdk-17/bin/jdb 1081
update-alternatives --install /usr/bin/jstack jstack /usr/lib/jvm/jdk-17/bin/jstack 1081
update-alternatives --install /usr/bin/jcmd jcmd /usr/lib/jvm/jdk-17/bin/jcmd 1081
update-alternatives --install /usr/bin/serialver serialver /usr/lib/jvm/jdk-17/bin/serialver 1081
update-alternatives --install /usr/bin/jinfo jinfo /usr/lib/jvm/jdk-17/bin/jinfo 1081
update-alternatives --install /usr/bin/jps jps /usr/lib/jvm/jdk-17/bin/jps 1081
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1081
update-alternatives --install /usr/bin/jhsdb jhsdb /usr/lib/jvm/jdk-17/bin/jhsdb 1081
update-alternatives --install /usr/bin/jlink jlink /usr/lib/jvm/jdk-17/bin/jlink 1081
update-alternatives --install /usr/bin/jstatd jstatd /usr/lib/jvm/jdk-17/bin/jstatd 1081
update-alternatives --install /usr/bin/jdeprscan jdeprscan /usr/lib/jvm/jdk-17/bin/jdeprscan 1081
update-alternatives --install /usr/bin/jshell jshell /usr/lib/jvm/jdk-17/bin/jshell 1081
update-alternatives --install /usr/bin/jdeps jdeps /usr/lib/jvm/jdk-17/bin/jdeps 1081
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk-17/bin/jar 1081
update-alternatives --install /usr/bin/jfr jfr /usr/lib/jvm/jdk-17/bin/jfr 1081
update-alternatives --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk-17/bin/jarsigner 1081
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk-17/bin/javadoc 1081
update-alternatives --install /usr/bin/jpackage jpackage /usr/lib/jvm/jdk-17/bin/jpackage 1081
update-alternatives: using /usr/lib/jvm/jdk-17/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode
update-alternatives --install /usr/bin/jmap jmap /usr/lib/jvm/jdk-17/bin/jmap 1081
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1081
update-alternatives --install /usr/bin/jconsole jconsole /usr/lib/jvm/jdk-17/bin/jconsole 1081
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk-17/bin/javap 1081
update-alternatives --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk-17/bin/rmiregistry 1081
update-alternatives --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk-17/bin/jrunscript 1081
Теперь у вас есть следующая обновленная ситуация для всех исполняемых файлов, перечисленных выше:
$ update-alternatives --config java
There are 4 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
* 2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
3 /usr/lib/jvm/jdk-13.0.2/bin/java 1081 manual mode
4 /usr/lib/jvm/jdk-17/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
^CTRL-C
$ update-alternatives --config jshell
There are 2 choices for the alternative jshell (providing /usr/bin/jshell).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/jdk-13.0.2/bin/jshell 1081 auto mode
1 /usr/lib/jvm/jdk-13.0.2/bin/jshell 1081 manual mode
2 /usr/lib/jvm/jdk-17/bin/jshell 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number: ^C
$ update-alternatives --config jpackage
There is only one alternative in link group jpackage (providing /usr/bin/jpackage): /usr/lib/jvm/jdk-17/bin/jpackage
Nothing to configure.
^CTRL-C
И так далее.