Установка Sun JDK в CentOS/RedHat

Написано 29 Март, 2013 в категории CentOS,Linux

По умолчанию в этих системах установлен OpenJDK, но если необходимо установить JDK от Sun, то нам поможет программа alternatives, которая позволяет переключаться между реализациями одной и той же программы (в нашем случае это будут java, keytool, rmiregistry и jre).

После установки Sun JDK в какую-то директорию, например /usr/java/sun-jdk-1.6/, нам необходимо переключиться на нее (чтобы при запуске java программ из консоли использовалась именно вновь установленная jdk, а не та что по умолчанию). Для переключения используем alternatives. Нам понадобятся команды с такими ключами:
alternatives [options] --install link name path priority [--slave link name path]... [--initscript service]
alternatives [options] --remove name path
alternatives [options] --display name
alternatives [options] --config name

1. Переключаем java на новый jdk

sudo alternatives --install /usr/bin/java java /usr/java/sun-jdk-1.6/bin/java 1500 --slave /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk1.6.0_11/bin/rmiregistry --slave /usr/lib/jvm/jre jre /usr/lib/jvm/jdk1.6.0_11/jre/

где /usr/bin/java - это java которая запускается когда вы вводите в консоль команду java, а запускается она потому что добавлена в переменную окружения path. По своей сути это не сама программа java, а ссылка на её реализацию (на самом деле там немного сложнее устроено, но суть такая же), вот эту реализацию мы и меняем с помощью alternatives;

java - это идентификатор для реализаций java в данной операционной системе (на самом деле это может быть произвольный набор символов, главное чтобы он обозначал реализации одной и той же программы, иначе сильно запутаетесь :)

/usr/java/sun-jdk-1.6/bin/java - расположение альтернативной реализации программы java

1500 - приоритет альтернативы. Система выбора альтернатив может работать в 2 режимах, в автоматическом и ручном. Мы рассматриваем ручной режим, а в нем приоритет не важен. А в автоматическом режиме при изменении в списке альтернативных программ, система по приоритетам определяет, какую альтернативу выбрать. Для того чтобы посмотреть приоритет альтернативной программы, необходимо использовать ключ --display (о нем подробнее написано ниже).

ключ --install устанавливает альтернативную реализацию программы java, но не активирует её;

--slave этот ключ необходим, например, когда используется технология RMI; если мы переведем на новый jdk только java, то RMI откажется работать т.к. по-прежнему используется rmiregestry из старого jdk, поэтому мы одновременно меняем не одну программу, а ряд связанных между собой. После ключа --slave (аналогично ключу --install) идет путь к дефолтной программе, идентификатор программы и путь к конкретной реализации этой программы

2. Альтернативный jdk установлен в систему, но не активирован. Исправим это!

sudo alternatives --config java

выбираем новый jdk (там интуитивно понятный интерфейс)
и проверяем что теперь используется java из нового jdk:

java -version

Все готово!

3. Если надо посмотреть список альтернатив и программ-"сателлитов", т.е. тех которые тоже изменятся при выборе данной альтернативы, то делаем так:

sudo alternatives --display java

4. Если вы где-то напортачили и альтернативу надо удалить, то достаточно указать её идентификатор и путь к альтернативной реализации. Например так:

sudo alternatives --remove java /usr/java/sun-jdk-1.6/bin/java

Альтернатива будет удалена. Если она была активной, то активной станет реализация по-умолчанию (помечена звездочкой в списке при вызове alternatives --config).

Всем, спасибо!