- Баллы
- 98
- Имя в Minecraft
- Dymeth
Caused by: java.lang.UnsupportedClassVersionError: class.Name has been compiled by a more recent version of the Java Runtime (class file version ПЕРВОЕ_ЧИСЛО), this version of the Java Runtime only recognizes class file versions up to ВТОРОЕ_ЧИСЛО
Крайне популярная ошибка, решение которой люди либо не могут нагуглить, либо не могут понять.
Объясняю.
Из-за чего возникает ошибка?
Для начала переведём:
Причина: java.lang.ОшибкаНеподдерживаемойВерсииКласса: class.Name был скомпилирован для более более поздней версией среды выполнения Java (версия файла класса ПЕРВОЕ_ЧИСЛО), эта версия среды выполнения Java распознает только версии файлов классов до ВТОРОЕ_ЧИСЛО.
Простыми словами, ошибка заключается в том, что плагин был создан под более новую версию Java, чем установлена у вас на сервере. Таким образом, ваша Java неспособна загрузить и выполнить код плагина.
Чтобы понять, какая версия Java вам нужна, обратим внимание на ПЕРВОЕ_ЧИСЛО. Именно оно подскажет, под какую версию Java был разработан плагин.
Каждая версия класса соответствует определённой версии Java, определить можно по таблице:
На самом деле, таблица даже не нужна. Самые сообразительные поймут, что для определения версии Java достаточно просто отнять от версии класса число 44. Например, class version 52 - 44 = 8 Java.
Тем не менее, вот список:
Java 1.0 45.0
Java 1.1 45.3
Java 1.2 46.0
Java 1.3 47.0
Java 1.4 48.0
Java 5 49.0
Java 6 50.0
Java 7 51.0
Java 8 52.0
Java 9 53.0
Java 10 54.0
Java 11 55.0
Java 12 56.0
Java 13 57.0
Java 14 58.0
Java 15 59.0
Java 16 60.0
Java 17 61.0
Java 18 62.0
Java 19 63.0
Java 20 64.0
Java 21 65.0
Java 22 66.0
Java 23 67.0
Более новые версии можно найти, например, тут: https://javaalmanac.io/bytecode/versions/
Тем не менее, вот список:
Java 1.0 45.0
Java 1.1 45.3
Java 1.2 46.0
Java 1.3 47.0
Java 1.4 48.0
Java 5 49.0
Java 6 50.0
Java 7 51.0
Java 8 52.0
Java 9 53.0
Java 10 54.0
Java 11 55.0
Java 12 56.0
Java 13 57.0
Java 14 58.0
Java 15 59.0
Java 16 60.0
Java 17 61.0
Java 18 62.0
Java 19 63.0
Java 20 64.0
Java 21 65.0
Java 22 66.0
Java 23 67.0
Более новые версии можно найти, например, тут: https://javaalmanac.io/bytecode/versions/
А вот взглянув на ВТОРОЕ_ЧИСЛО можно легко понять, какая версия Java у вас установлена прямо сейчас. Делается это по той же самой таблице под спойлером.
Рассмотрим пример:
Caused by: java.lang.UnsupportedClassVersionError: class.Name has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Из данной ошибки сразу понятно, что плагину требуется Java 11, но у ваш сервер запущен с Java 8.
Всегда, когда ваша версия Java ниже версии Java плагина, то возникает ошибка. Если ваша версия Java совпадает или выше (новее) версии Java плагина, то в большинстве случаев будет работать нормально.
Например, если для плагина требуется Java 8, а у вас будет Java 11, то проблем не возникнет.
Как решить эту проблему?
У вас три решения:
Вы можете использовать для запуска сервера более новую версию Java. В большинстве случаев это самый простой и универсальный способ решить проблему.
Вам необязательно использовать ровно ту, что требуется для плагина. Можно и более новую.
Лично я рекомендую использовать LTS-версии Java. Это версии, для которых заявлена длительная поддержка разработчиков. LTS - Long Term Support - как раз и переводится как "долгосрочная поддержка".
Также добавлю, что чем новее версия - тем она функциональней и, как правило, производительней. Поэтому если есть возможность ставить наиболее новую LTS версию Java - лучше устанавливать её.
Список LTS-версий Java с датами их поддержки можно найти тут:
https://en.wikipedia.org/wiki/Java_version_history#Release_table
При запуске сервера на более новой версии Java вы можете столкнуться с ошибкой:
Это происходит из-за того, что ваша версия Java выше той, которую официально поддерживает ядро. Так, например, Paper рекомендует запускать своё ядро на следующих версиях:
1.8 to 1.11 Java 8
1.12 to 1.16.4 Java 11
1.16.5 Java 16
1.17.1-1.18.1+ Java 21
Тем не менее, ничего не мешает вам попытаться запустить ядро на более новой версии. Опять же, в большинстве случаев это сработает без проблем. Чтобы отключить предупреждение ядра и разрешить ему запуск на неподдерживаемой версии - необходимо добавить аргумент в скрипт запуска.
Перед -jar пропишите:
-DPaper.IgnoreJavaVersion=true
После этого вы сможете спокойно запускать свои ядра на наиболее новых версиях Java. Таким образом вы не только сможете запускать и все современные плагины, но ещё и получите небольшой прирост производительности за счёт использования наиболее современных технологий в Java.
Вам необязательно использовать ровно ту, что требуется для плагина. Можно и более новую.
Лично я рекомендую использовать LTS-версии Java. Это версии, для которых заявлена длительная поддержка разработчиков. LTS - Long Term Support - как раз и переводится как "долгосрочная поддержка".
Также добавлю, что чем новее версия - тем она функциональней и, как правило, производительней. Поэтому если есть возможность ставить наиболее новую LTS версию Java - лучше устанавливать её.
Список LTS-версий Java с датами их поддержки можно найти тут:
https://en.wikipedia.org/wiki/Java_version_history#Release_table
При запуске сервера на более новой версии Java вы можете столкнуться с ошибкой:
Unsupported Java detected (ПЕРВОЕ_ЧИСЛО). Only up to Java ВТОРОЕ_ЧИСЛО is supported.
Это происходит из-за того, что ваша версия Java выше той, которую официально поддерживает ядро. Так, например, Paper рекомендует запускать своё ядро на следующих версиях:
1.8 to 1.11 Java 8
1.12 to 1.16.4 Java 11
1.16.5 Java 16
1.17.1-1.18.1+ Java 21
Тем не менее, ничего не мешает вам попытаться запустить ядро на более новой версии. Опять же, в большинстве случаев это сработает без проблем. Чтобы отключить предупреждение ядра и разрешить ему запуск на неподдерживаемой версии - необходимо добавить аргумент в скрипт запуска.
Перед -jar пропишите:
-DPaper.IgnoreJavaVersion=true
После этого вы сможете спокойно запускать свои ядра на наиболее новых версиях Java. Таким образом вы не только сможете запускать и все современные плагины, но ещё и получите небольшой прирост производительности за счёт использования наиболее современных технологий в Java.
Вы можете использовать более старую версию плагина, для которой требуется более старая версия Java. Как найти подходящую версию? Заходите в список обновлений плагина и при помощи CTRL+F ищете упоминание слова "Java". Рано или поздно вы наткнётесь на информацию о том, что плагин был обновлён на более новую версию Java. Соответственно, на предыдущей версии плагин использовал более старую версию Java.
Но, к сожалению, у некоторых современных плагинов никогда не было поддержки старых версий Java (и, скорее всего, уже никогда не будет). В этом основной недостаток этого способа.
Но, к сожалению, у некоторых современных плагинов никогда не было поддержки старых версий Java (и, скорее всего, уже никогда не будет). В этом основной недостаток этого способа.
Этот способ очень хорошо подойдёт разработчикам или людям, которые готовы заказать эту работу у программистов за денежку.
Задача состоит в том, чтобы найти исходный код нужного плагина или декомпилировать его, после чего произвести модификацию таким образом, чтобы плагин мог запускаться на более старой версии Java.
Минус способа в том, что вам потребуется либо потратить собственное время, либо финансы на заказ работы у другого человека.
Задача состоит в том, чтобы найти исходный код нужного плагина или декомпилировать его, после чего произвести модификацию таким образом, чтобы плагин мог запускаться на более старой версии Java.
Минус способа в том, что вам потребуется либо потратить собственное время, либо финансы на заказ работы у другого человека.
Какой способ выбирать - решайте сами.
Постарался максимально подробно рассказать о проблеме, но если остались вопросы - задавайте в комментариях
Последнее редактирование: