Как исправить ошибку «Unsupported Java Version»

1. Диагностика текущей версии Java

Подключитесь к выделенному серверу по SSH. В панели proxify.cloud (вкладка «Консоль» или «VNC») откройте терминал Ubuntu.

java -version

Ожидаемый вывод для современных версий Minecraft:

  • 1.17–1.20.4 → Java 17 (LTS)
  • 1.20.5+ → Java 21 (LTS)

Если вывод показывает version "1.8", 11 или 16 — это причина ошибки. Также проверьте альтернативы:

update-alternatives --list java

Запишите пути: они понадобятся для переключения.


2. Установка нужной версии Java (OpenJDK 17 или 21)

Обновите индекс пакетов и установите требуемую LTS-версию. Для Minecraft 1.20.5 и новее ставьте 21, для 1.17–1.20.4 — 17.

apt update && apt install -y openjdk-21-jdk-headless
# ИЛИ для старых версий:
# apt update && apt install -y openjdk-17-jdk-headless

Проверьте установку:

java -version
# Пример корректного вывода:
# openjdk version "21.0.3" 2024-04-16
# OpenJDK Runtime Environment (build 21.0.3+11-Ubuntu-1ubuntu122.04)
# OpenJDK 64-Bit Server VM (build 21.0.3+11-Ubuntu-1ubuntu122.04, mixed mode, sharing)

3. Настройка приоритета Java через update-alternatives

Если в системе несколько версий, сделайте новую версией по умолчанию.

update-alternatives --config java

В интерактивном меню введите номер строки, где путь содержит java-21-openjdk (или java-17-openjdk), и нажмите Enter.

Проверьте:

java -version
update-alternatives --display java

В поле link currently points to должен быть путь к только что установленному JDK.


4. Исправление переменной окружения JAVA_HOME

Многие скрипты запуска (Paper, Purpur, Fabric, Forge) читают JAVA_HOME. Установите его системно.

# Найдите корень JDK (без /bin/java)
readlink -f $(which java)
# Пример: /usr/lib/jvm/java-21-openjdk-amd64/bin/java
# Нужен путь: /usr/lib/jvm/java-21-openjdk-amd64

Добавьте в /etc/environment:

echo 'JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"' >> /etc/environment
echo 'PATH="$JAVA_HOME/bin:$PATH"' >> /etc/environment

Примените без перезагрузки:

source /etc/environment
echo $JAVA_HOME

5. Обновление скрипта запуска сервера (start.sh)

Перейдите в директорию сервера. В панели proxify.cloud это обычно /home/container или /var/lib/minecraft. Уточните через pwd.

cd /home/container
ls -la start.sh

Откройте файл:

nano start.sh

Приведите shebang и переменную JAVA к актуальному пути:

#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
JAVA="$JAVA_HOME/bin/java"

# Пример запуска Paper/Purpur
$JAVA -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
  -jar paper-1.21.jar nogui

Сделайте исполняемым:

chmod +x start.sh

6. Проверка совместимости ядра сервера (Paper/Spigot/Fabric/Forge)

Скачайте свежий билд, поддерживающий вашу Java. Старые сборки (до 1.17) не запустятся на Java 17/21 без патчей.

Paper 1.21 (Java 21):

wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/1.21/builds/123/downloads/paper-1.21-123.jar"

Fabric (через installer):

wget -O fabric-installer.jar https://maven.fabricmc.net/net/fabricmc/fabric-installer/1.0.1/fabric-installer-1.0.1.jar
$JAVA -jar fabric-installer.jar server -dir . -mcversion 1.21 -loader 0.16.9 -snapshot

Forge (Java 21 требует 50.x+):

wget -O forge-installer.jar https://maven.minecraftforge.net/net/minecraftforge/forge/1.21-50.0.0/forge-1.21-50.0.0-installer.jar
$JAVA -jar forge-installer.jar --installServer

После установки проверьте созданный run.sh или forge-*.jar — поправьте JAVA_HOME там аналогично пункту 5.


7. Очистка кэша и старых нативных библиотек

Ошибка может сохраняться из-за кэшированных нативок (LWJGL, netty) в директории сервера.

cd /home/container
rm -rf libraries/net/minecraftforge/forge/*/natives-*
rm -rf libraries/org/lwjgl/
rm -rf cache/
rm -rf version.json

Для Fabric/Paper кэш обычно в libraries/ и .fabric/.


8. Запуск и проверка логов

Запустите сервер через исправленный скрипт:

./start.sh

Смотрите консоль в панели proxify.cloud (вкладка «Консоль»). Успешный старт содержит строки:

[Server thread/INFO]: Starting minecraft server version 1.21
[Server thread/INFO]: Loading properties
[Server thread/INFO]: Default game type: SURVIVAL
[Server thread/INFO]: Generating keypair
[Server thread/INFO]: Starting Minecraft server on *:25565

Если видите UnsupportedClassVersionError — проверьте, что $JAVA в start.sh указывает именно на Java 21/17, а не на старый симлинк.


9. Автозапуск через systemd (опционально, для выделенного сервера)

Создайте юнит, чтобы сервер поднимался после ребута ноды proxify.cloud.

nano /etc/systemd/system/minecraft.service

Содержимое:

[Unit]
Description=Minecraft Server
After=network.target

[Service]
WorkingDirectory=/home/container
ExecStart=/home/container/start.sh
User=root
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
Environment=JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64

[Install]
WantedBy=multi-user.target

Включите и запустите:

systemctl daemon-reload
systemctl enable minecraft
systemctl start minecraft
journalctl -u minecraft -f

10. Проверка портов и фаервола (UFW/iptables)

Убедитесь, что порт 25565 (или ваш server-port из server.properties) открыт на Ubuntu. В proxify.cloud внешний фаервол настраивается в разделе «Сеть» → «Фаервол», но локальный UFW тоже должен пропускать трафик.

ufw status
ufw allow 25565/tcp
ufw reload

Проверьте извне: telnet <IP_сервера> 25565 или через онлайн-чекер.


Возможные проблемы и решения

Проблема Причина Решение
Error: Could not find or load main class Неверный путь к jar в start.sh Проверьте имя файла (paper-1.21.jar vs paper.jar), используйте ls *.jar.
UnsupportedClassVersionError: 65.0 (Java 21) / 61.0 (Java 17) Сервер запускается старой Java Жёстко задайте JAVA="/usr/lib/jvm/java-21-openjdk-amd64/bin/java" в start.sh.
java.lang.NoClassDefFoundError: jdk/internal/misc/Unsafe Использование Java 22+ (non-LTS) на старом ядре Ставьте только LTS: 17 или 21. Удалите openjdk-22-*.
Сервер падает сразу после Starting minecraft server Нехватка RAM / OOM Killer Увеличьте -Xmx в start.sh до 70-80% физической RAM. Проверьте `dmesg
Connection refused извне Порт закрыт в UFW или панели proxify.cloud Откройте порт в панели: «Сеть» → «Фаервол» → «Добавить правило» TCP 25565. И в UFW (пункт 10).
libjli.so: cannot open shared object file Сломанный JAVA_HOME (нет lib/server/) Переустановите JDK: apt install --reinstall openjdk-21-jdk-headless.
Скрипт start.sh не выполняется Нет права исполнения или Windows CRLF chmod +x start.sh и sed -i 's/\r$//' start.sh.
Ошибка Keystore was tampered, or password was incorrect Старый keystore от Java 8 Удалите keystore в папке сервера, он перегенерится.
Панель proxify.cloud показывает «Offline» после ребута systemd-юнит не включен systemctl enable minecraft и проверьте systemctl is-enabled minecraft.
Моды/плагины выдают Unsupported major.minor version Плагин скомпилирован под новее Java, чем установлена Обновите плагины или поставьте совместимую Java (17 для 1.18-1.20.4, 21 для 1.20.5+).