Если вам потребовался стандартный
JDK от
Sun Microsystems (
а точнее теперь уже от Oracle), вместо
OpenJDK, который поставляется с современными свободными дистрибутивами Linux, то его можно скачать либо с дополнительных сторонних репозиториев для вашего дистрибутива, либо напрямую с сайта
http://www.oracle.com. Если ставить Java из репозиториев для вашего дистрибутива, то скорее всего всё само настроется и заработает, и ни о чем беспокоится вам не придется, но если вы скачали JDK или JRE в виде бинарного файла
.bin с сайта Oracle, придется совершить несколько дополнительных телодвижений.
Скачать JDK с сайта Oracle можно в двух видах: это бинарные файлы вида
*.bin и
*-rpm.bin. На сколько я заметил, разница между ними небольшая. Файл *.bin содержит просто каталог с файлами JDK, который будет распакован в директорию из которой вы запустили этот *.bin, а файл *-rpm.bin содержит RPM-пакеты, которые распакуются в ту директорию из которой вы запустили *-rpm.bin, а затем будут установлены. Вся установка RPM-пакетов заключается в распаковке в каталог
/usr/java тех же самых файлов и каталогов, которые содержит пакет *.bin. По крайней мере, так у происходит у меня в
OpenSUSE 11.2 и
ALT Linux 5.0, думаю что в остальных дистрибутивах картина такая же. После распаковки JDK приступаем к тем самым дополнительным телодвижениям.
Переменные окружения
Простой распаковки файлов JDK недостаточно для того, что бы можно было нормально использовать установленный JDK по умолчанию в системе. Следующим шагом необходимо настроить переменные окружения. Приведу пример установки переменных окружения для JDK полученного из файла jdk-6u19-linux-i586-rpm.bin. Для этого в самый конец файла /etc/profile (в OpenSUSE /etc/profile.local ) добавляем следующие строки:
JAVA_HOME=/usr/java/jdk1.6.0_19
JRE_HOME=/usr/java/jdk1.6.0_19/jre
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME JRE_HOME PATH
Примечания:
- В некоторых случая возможно понадобится добавить эти же строки в файл /etc/bashrc (в SUSE /etc/bash.bashrc.local), который читается bash‘ем, если он запущен без параметра –login
- В дистрибутивах SUSE для установки глобальных переменных окружения по умолчанию следует использовать файлы /etc/profile.local и /etc/bash.bashrc.local, потому что после апгрейда системы, файлы /etc/profile и /etc/bash.bashrc могут быть перезаписаны. Если таких файлов нет, то необходимо их создать.
- Переменная JRE_HOME может быть и не особо нужна, но я часто встречаю её в современных дистрибутивах, поэтому на всякий случай лучше её установить.
- Таким же образом в файле /etc/profile можно описать создание переменной CLASSPATH, в которой можно указать пути к каталогам с дополнительными java-классами и к файлам *.jre.
После подготовки файлов /etc/profile и /etc/bashrc необходимо перезайти в систему. В консоле можно проверить правильно ли установлены значения переменных:
$ set |grep JAVA_HOME
JAVA_HOME=/usr/java/jdk1.6.0_19
$ set |grep CLASSPATH
CLASSPATH=/usr/java/jdk1.6.0_19/lib:.
$ set |grep ^PATH
PATH=/usr/java/jdk1.6.0_19/bin:/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin
Теперь проверяем версию Java:
$ java -version
java version “1.6.0_19″
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)
Всё, теперь по умолчанию будет использоваться JDK вместо OpenJDK.
Утилита update-alternatives
На самом деле, переменную PATH можно было и не менять. В современных дистрибутивах Linux установка среды выполнения Java по умолчанию осуществляется с помощью утилиты update-alternatives. Кратко опишу принцип её работы на моем примере с java. В каталоге альтернатив /etc/alternatives есть символическая ссылка java, которая указывает на настоящий файл java, расположенный где-то в файловой системе. В каталоге /usr/bin есть символическая ссылка, которая указывает на ссылку /etc/alternatives/java. Таким образом, для всех пользователей и программ, которые вызывают java на самом деле доступна ссылка /usr/bin/java которая ссылается на реальную программу java через ссылку /etc/alternatives/java. Утилита update-alternatives служит для переключения символической ссылки /etc/alternatives/java на различные версии java, установленные в системе, а все пользователи либо программы как использовали ссылку /usr/bin/java для вызова java, так и будут продолжать её использовать.
Посмотрим какие установленные версии java доступны для /etc/alternatives/java в моем случае c помощью команды –list, для этого ей необходимо указать имя ссылки в каталоге /etc/alternatives:
# update-alternatives –list java
/usr/lib/jvm/jre-1.6.0-openjdk/bin/java
Используя команду –config можно так же посмотреть доступные альтернативы для java, а потом выбрать нужную в интерактивном режиме :
# update-alternatives –config java
There is only 1 program which provides java
(/usr/lib/jvm/jre-1.6.0-openjdk/bin/java). Nothing to configure.
Приведу теперь простую и понятную схему ссылок, которая используется на данный момент в моей системе:
/usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
Итак, как стало ясно, на данный момент в моем случае доступна только одна альтернатива для java, это OpenJDK. Для того, чтобы добавить альтернативную версию java, необходимо использовать команду –install:
# update-alternatives –install /usr/bin/java java /usr/java/jdk1.6.0_19/bin/java 100000
# update-alternatives –list java
/usr/lib/jvm/jre-1.6.0-openjdk/bin/java
/usr/java/jdk1.6.0_19/bin/java
Для установки альтернативы необходимо указать главную ссылку, которая будет ссылаться на символическую ссылку в /etc/alternatives (для моего случая это /bin/usr/java), затем имя ссылки в каталоге /etc/alternatives (в данном случае java), альтернативу для этой ссылки, т.е. местоположение самой программы ( /usr/java/jdk1.6.0_19/bin/java) и приоритет для этой альтернативы. Приоритет необходим для автоматического выбора альтернативы при включении automatic mode (будет выбрана альтернатива с наибольшим приоритетом).
После установки новой альтернативы проверяем список доступных альтернатив для java и видим, что там появилась /usr/java/jdk1.6.0_19/bin/java и теперь нам необходимо переключиться на неё, для этого используем команду –config:
# update-alternatives –config java
There are 2 alternatives which provide `java’.
Selection Alternative
———————————————–
1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
*+ 2 /usr/java/jdk1.6.0_19/bin/java
Press enter to keep the default[*], or type selection number: 2
Using ‘/usr/java/jdk1.6.0_19/bin/java’ to provide ‘java’.
В моем случае переключение произошло автоматически, т.к. я установил новую альтернативу с приоритетом более высоким, чем был у OpenJDK, а группа альтернатив java находилась в automatic mode. Но я все равно ввёл цифру 2, что повторно переключило альтернативу java на JDK и отключило automatic mode. Теперь при добавлении еще одной версии java в альтернативы автоматического переключения не произойдет.
Примечания:
- При использовании –config, символ “*” показывает какая альтернатива сейчас используется а “+” на сколько я понял, указывает на альтернативу с наивысшим приоритетом, именно на неё произойдет переключение в случае перевода данной группы альтернатив в автоматический режим.
- Если вы руками переназначите значение ссылок /etc/alternatives/java или /usr/bin/java, то скорее всего при перезагрузке эти значения вернутся в состояние которое описано утилитой update-alternatives.
- Каталог альтернатив /etc/alternatives является каталогом по умолчанию и может быть изменен командой update-alternatives –altdir
- Утилиту update-alternatives можно использовать так же для создания своих собственных групп альтернатив
После настройки update-alternatives можете закомментировать строку в файле /etc/profile, которая добавляет в переменную окружения PATH путь к директории /bin и перезайти в систему. Теперь вы можете использовать java из JDK по привычной ссылке /usr/bin/java.
Описание остальных команд update-alternatives я приводить не буду, их смысл очень легко понять из man’а.