Ошибка java.lang.UnsupportedClassVersionError: Unsupported major.minor version
встречается при попытке запуска Java-программы и свидетельствует о несовместимости версий Java, используемых при компиляции и запуске кода.
Например, когда код был скомпилирован с использованием JDK версии 1.8, а пытаются запустить его на JRE версии 1.7, возникает именно такая ошибка.
Причина ошибки
Основная причина этой ошибки — различие в версиях Java. Каждая версия Java обозначается парой чисел: старший (major) и младший (minor) номера версии. При компиляции кода эта информация о версии встраивается в байт-код. Если версия JRE, на которой происходит запуск, старше версии, использованной при компиляции, виртуальная машина Java не сможет понять байт-код и выдаст ошибку UnsupportedClassVersionError
.
Решение ошибки
Есть несколько способов решения этой проблемы:
-
Обновить JRE до версии, соответствующей версии JDK, использованной при компиляции. Это самый простой и очевидный способ. Если код был скомпилирован на JDK 1.8, то и JRE должен быть не ниже этой версии.
-
Понизить версию JDK до версии исполняемого JRE. Если код не использует функционал, доступный только в более новых версиях Java, то можно без проблем использовать более старую версию JDK.
-
Использовать флаг
-target
при компиляции. Этот флаг позволяет указать версию байт-кода, которую должен генерировать компилятор. Таким образом, можно скомпилировать код так, чтобы он работал на более старой версии JRE.
PATH в JRE и JDK
Переменная PATH
используется операционной системой для поиска исполняемых файлов. В контексте Java PATH
должен указывать на директорию bin
в установленной версии JDK или JRE.
Основное отличие состоит в том, что в JDK, в дополнение к JRE, содержатся дополнительные инструменты, такие как компилятор javac
, в то время как JRE содержит только среду выполнения для запуска Java-приложений. Если требуется компилировать Java-код, то PATH
должен указывать на директорию bin
в JDK. В противном случае достаточно указать на JRE.
Добавить комментарий