Установка OpenJDK на Rocky Linux

Введение
Java — это объектно-ориентированный язык программирования, разработанный Sun Microsystems в 1995 году. Он создавался как переносимая высокоуровневая платформа с минимальными зависимостями от ОС. Главная идея — написать код один раз и запускать приложение на разных системах и платформах.
OpenJDK — свободная и открытая реализация Java SE и JDK. Первоначальный релиз OpenJDK состоялся в 2007 году под лицензией GNU GPL. Код OpenJDK совместим с Oracle JDK, и в большинстве случаев они функционально эквивалентны. Основное различие в политике распространения и лицензионных условиях: OpenJDK — открытый проект, Oracle JDK — проприетарный дистрибутив с отдельными условиями использования.
В этом руководстве вы научитесь:
- Устанавливать OpenJDK из официального репозитория Rocky Linux (версии 8 и 11).
- Ручно устанавливать более новые сборки (пример: OpenJDK 16) из tar.gz.
- Переключать активную версию Java с помощью alternatives.
- Настраивать переменную окружения JAVA_HOME системно и для отдельного пользователя.
- Проверять установку и решать типичные проблемы.
Важно: все команды в примерах предполагают, что вы выполняете их от имени пользователя с правами root или через sudo.
Требования
- Система Rocky Linux с доступом к интернету для скачивания пакетов.
- Пользователь с привилегиями root или sudo.
- Обновлённые репозитории и пакеты рекомендуются перед установкой.
Обновление репозиториев и поиск доступных пакетов OpenJDK
Перед установкой обновите список пакетов и сами пакеты:
sudo dnf updateПодтвердите обновление, если система предложит ввести y.
Список доступных пакетов OpenJDK в официальном репозитории можно получить командой:
dnf search openjdkНа экране вы увидите доступные пакеты, обычно для Rocky Linux предоставляются сборки OpenJDK 1.8 (Java 8) и 11.x. Если вам нужна более новая версия, её можно установить вручную из бинарного tar.gz.

Установка OpenJDK 11 из репозитория
Чтобы установить Java 11 и набор разработки для неё, выполните:
sudo dnf install java-11-openjdk java-11-openjdk-develПодтвердите установку y при запросе. После завершения проверьте установленную версию:
java -versionОжидаемый результат укажет на OpenJDK 11.

Установка OpenJDK 8 из репозитория
Если проект требует Java 8, установите её так:
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-develПосле установки проверьте:
java -versionСистема покажет OpenJDK 1.8.

Ручная установка OpenJDK 16 из tar.gz
Репозитории часто содержат LTS-версии (например, 8 и 11). Для получения более свежих сборок можно установить JDK вручную, скачав готовый бинарный архив.
Пример установки OpenJDK 16 из официального дистрибутива:
- Скачайте архив и распакуйте его:
wget https://download.java.net/java/GA/jdk16.0.2/d4a915d82b4c4fbb9bde534da945d746/7/GPL/openjdk-16.0.2_linux-x64_bin.tar.gz
tar -xf openjdk-16.0.2_linux-x64_bin.tar.gzПосле распаковки появится каталог, например jdk-16.0.2.
- Перенесите каталог в стандартную директорию для JVM:
mkdir -p /usr/lib/jvm
mv jdk-16.0.2 /usr/lib/jvm/- Зарегистрируйте бинарные пути в системе через alternatives (это позволит переключать версии):
alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-16.0.2/bin/java 0
alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-16.0.2/bin/javac 0После этого новая версия появится в списке альтернатив.

Пояснение по командам alternatives:
alternatives --installдобавляет вариант в систему.- При одинаковом приоритете система предложит выбрать вручную.
- Просмотрите зарегистрированные альтернативы:
alternatives --listВы увидите записи для java и javac, в том числе вашу сборку OpenJDK 16.

Переключение версии Java по умолчанию
После установки нескольких версий Java удобнее управлять активной версией с помощью команды alternatives.
- Чтобы выбрать версию
javaпо умолчанию:
sudo alternatives --config javaСистема выведет список доступных реализаций с номерами. Введите номер желаемой версии и нажмите Enter.

- Аналогично смените
javac, если нужно:
sudo alternatives --config javac- Проверьте активные версии:
java --version
javac --version
В примере на сервере были установлены одновременно OpenJDK 11, OpenJDK 1.8 и ручная сборка OpenJDK 16.
Настройка переменной окружения JAVA_HOME
Переменная JAVA_HOME указывает приложениям путь к установленной JDK. Её можно задать системно для всех пользователей или в конфигурации отдельного пользователя.
Системная настройка JAVA_HOME
- Создайте файл конфигурации в
/etc/profile.d:
cd /etc/profile.d/
nano java.sh- Вставьте строку с корректным путём к установленной JDK. Пример для JDK 16:
JAVA_HOME=/usr/lib/jvm/jdk-16.0.2
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATHСохраните файл и выйдите (Ctrl+X, затем y и Enter в nano).
- Активируйте настройки:
source /etc/profile.d/java.sh- Проверьте:
echo $JAVA_HOME
Настройка JAVA_HOME для одного пользователя
Если нужно переопределить системные настройки для конкретного пользователя, используйте файл ~/.bashrc или аналогичный в его домашней директории.
- Переключитесь на пользователя и откройте
~/.bashrc:
su - johndoe
nano ~/.bashrc- Добавьте строки (пример для Java 1.8):
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH- Примените изменения:
source ~/.bashrc- Проверьте:
echo $JAVA_HOME
Чтобы запустить команду в контексте конкретного JDK без изменения глобальных переменных, можно временно задать переменные в одной строке:
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk command --optionЧастые ошибки и способы их устранения
- Приложение не видит нужную версию Java: проверьте
which java,java --versionи значениеJAVA_HOME. - alternatives показывает неверный путь: убедитесь, что путь, зарегистрированный через alternatives, существует и содержит исполняемые файлы (
java,javac). - Неверные права доступа в
/usr/lib/jvm: файлы JDK должны быть читаемы для пользователей, запускающих приложения. - Запуск приложений через systemd не использует
/etc/profile.d: для сервисов systemd переменные окружения нужно определять в unit-файле (опция Environment= или EnvironmentFile=).
Пример добавления JAVA_HOME в systemd unit:
[Service]
Environment=JAVA_HOME=/usr/lib/jvm/jdk-11.0.10
Environment=PATH=%JAVA_HOME%/bin:/usr/binПосле правки юнита выполните:
systemctl daemon-reload
systemctl restart your-serviceАльтернативные подходы и инструменты
- SDKMAN! — менеджер версий для JDK, удобен для разработчиков. Работает на уровне пользователя и позволяет быстро переключаться между дистрибутивами Java.
- Контейнеры (Docker) — в CI/CD удобно использовать контейнеры с нужной версией JDK для изоляции окружения.
- Сборки от сторонних поставщиков: AdoptOpenJDK (теперь Adoptium), Azul Zulu, Amazon Corretto. Они предоставляют стабильные бинарные сборки OpenJDK.
Когда ручная установка предпочтительнее репозитория:
- Нужна конкретная сборка, отсутствующая в репозиториях.
- Требуется экспериментальная или новейшая версия.
- Нет желания полагаться на системные репозитории.
Когда лучше использовать репозиторий:
- Для рабочих серверов предпочтительны пакеты из репозиториев, так как они получают обновления безопасности через пакетный менеджер.
Чек-листы (роль: DevOps / разработчик)
Чек-лист для DevOps:
- Обновил репозитории перед установкой.
- Установил JDK через dnf или положил вручную в /usr/lib/jvm.
- Зарегистрировал альтернативы и выбрал дефолтную версию.
- Настроил JAVA_HOME в /etc/profile.d для системной установки.
- Добавил переменные в systemd unit при необходимости.
- Проверил права доступа к файлам JDK.
- Документировал выбранную версию и путь в конфигурации окружения.
Чек-лист для разработчика:
- Убедился, что локальная версия JDK совпадает с билдами CI.
- Использую SDKMAN! или проектные скрипты для унификации версий на рабочих станциях.
- Проверил, что PATH указывает на корректную java/bin.
Тесты и критерии приёмки
Критерии приёмки установки Java на сервере:
java --versionвозвращает ожидаемую версию.javac --versionвозвращает версию компилятора, соответствующую JDK.- Переменная
JAVA_HOMEуказывает на существующий каталог JDK. - Сервис systemd (если использовался) стартует и использует выбранную JDK.
Простейшие тесты:
- Создайте файл HelloWorld.java и скомпилируйте:
cat > HelloWorld.java <<'EOF'
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}
EOF
javac HelloWorld.java
java HelloWorldОжидаемый вывод: Hello, Java.
Практическое руководство по быстрому откату (rollback)
Если после смены версии возникает проблема, выполните:
- Верните альтернативу на предыдущую рабочую версию:
sudo alternatives --config java
sudo alternatives --config javac- Верните/обновите systemd unit, если он был изменён, и перезагрузите сервис:
systemctl daemon-reload
systemctl restart your-service- Если изменения в /etc/profile.d были ошибочными, удалите или исправьте файл и выполните
sourceлибо перезагрузите систему.
Ментальные модели и рекомендации
- Разделяйте окружения: используйте разные версии Java для разработки, тестирования и продакшена при необходимости.
- Предпочитайте LTS-версии (например, Java 8, 11, 17) для критичных систем, если нет нужды в новых возможностях.
- Для локальной разработки удобны менеджеры версий (SDKMAN!), для серверов — пакеты из репозитория и автоматические обновления через dnf.
Быстрая памятка команд (cheat sheet)
- Обновление системы:
sudo dnf update - Поиск OpenJDK в репозитории:
dnf search openjdk - Установка Java 11:
sudo dnf install java-11-openjdk java-11-openjdk-devel - Установка Java 8:
sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel - Установка вручную: распаковка и mv в
/usr/lib/jvm, затемalternatives --install - Смена дефолтной java:
sudo alternatives --config java - Проверка:
java --versionиjavac --version - Настройка JAVA_HOME системно: создать
/etc/profile.d/java.shиsourceего
Когда этот подход не подойдёт
- Если ваши приложения зависят от коммерческих сборок Oracle JDK с поддержкой и патчами от производителя.
- Если политика компании запрещает использовать пакеты из внешних источников или ручные установки без аудита.
Краткое резюме
Поздравляем — вы установили и настроили OpenJDK на Rocky Linux. Теперь вы можете:
- Устанавливать несколько версий Java параллельно.
- Переключать активную версию через alternatives.
- Настроить JAVA_HOME системно и для пользователей.
Важно: для серверов предпочитайте стабильные, поддерживаемые сборки и автоматические обновления безопасности. Для разработчиков удобно использовать менеджеры версий и контейнеры для воспроизводимости окружения.
Важные заметки
- Сервисы systemd не читают
/etc/profile.dавтоматически; используйте Environment в unit-файлах. - При ручной установке соблюдайте права доступа и структуру директорий.
Если нужно, могу подготовить готовый systemd unit с конфигурацией JAVA_HOME для конкретного сервиса, или написать Ansible-плейбук для автоматической установки нужной версии OpenJDK на множестве серверов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента