Как исправить ошибку «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+). |
Комментарии (0)