Java runtime class file version 52 0

Как исправить ошибку java.lang.UnsupportedClassVersionError

В этом кратком руководстве мы узнаем, что вызывает ошибку среды выполнения Java java.lang.UnsupportedClassVersionError: Unsupported major.minor version и как ее исправить.

2. Взгляд на ошибку​

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/foreach/MajorMinorApp  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, чем версия, с которой мы пытались его запустить. В частности, в этом случае мы скомпилировали наш класс с помощью Java 11 и попытались запустить его с помощью Java 8.

2.1. Номера версий Java​

Для справки давайте быстро взглянем на номера версий Java. Это пригодится, если нам понадобится загрузить соответствующую версию Java.

Старший и дополнительный номера версий хранятся в байт-коде класса в байтах шесть и семь.

Давайте посмотрим, как номера основных версий соотносятся с версиями Java:

  • 45 = Java 1.1
  • 46 = Java 1.2
  • 47 = Java 1.3
  • 48 = Java 1.4
  • 49 = Ява 5
  • 50 = Ява 6
  • 51 = Ява 7
  • 52 = Ява 8
  • 53 = Ява 9
  • 54 = Ява 10
  • 55 = Ява 11
  • 56 = Ява 12
  • 57 = Ява 13

3. Исправление через командную строку​

Теперь давайте обсудим, как мы можем решить эту ошибку при запуске Java из командной строки.

В зависимости от нашей ситуации у нас есть два способа устранить эту ошибку: скомпилировать наш код для более ранней версии Java или запустить наш код для более новой версии Java .

Окончательное решение зависит от нашей ситуации. Если нам нужно использовать стороннюю библиотеку, которая уже была скомпилирована на более высоком уровне, лучшим вариантом, вероятно, будет запуск нашего приложения с использованием более новой версии Java. Если мы упаковываем приложение для распространения, лучше всего скомпилировать его до более старой версии.

3.1. Переменная среды JAVA_HOME ​

Давайте начнем с проверки того, как установлена наша переменная JAVA_HOME . Это скажет нам, какой JDK используется, когда мы запускаем javac из нашей командной строки:

 echo %JAVA_HOME% C:\Apps\Java\jdk8-x64 

Если мы готовы полностью перейти на более новый JDK , мы можем загрузить более новую версию и убедиться, что наши переменные среды PATH и JAVA_HOME установлены соответствующим образом .

3.2. Запуск новой JRE​

Возвращаясь к нашему примеру, давайте посмотрим, как мы можем устранить ошибку, запустив ее на более высокой версии Java. Предполагая, что у нас есть Java 11 JRE в C:\Apps\jdk-11.0.2 , мы можем запустить наш код с помощью упакованной с ним команды java :

 C:\Apps\jdk-11.0.2\bin\java com.foreach.MajorMinorApp Hello World! 

3.3. Компиляция со старым JDK​

Если мы пишем приложение, которое мы хотим запустить до определенной версии Java, нам нужно скомпилировать код для этой версии.

Мы можем сделать это одним из трех способов: используя более старый JDK для компиляции нашего кода; используя параметры -bootclasspath , -source и -target команды javac (JDK 8 и старше); или с помощью параметра –release (JDK 9 и новее).

Давайте начнем с использования более старого JDK, аналогично тому, как мы использовали более новый JRE для запуска нашего кода:

 C:\Apps\Java\jdk1.8.0_31\bin\javac com/foreach/MajorMinorApp.java 

Можно просто использовать -source и -target , но при этом могут создаваться файлы классов, несовместимые со старой версией Java.

Чтобы обеспечить совместимость, мы можем указать -bootclasspath на rt.jar целевой JRE:

 javac -bootclasspath "C:\Apps\Java\jdk1.8.0_31\jre\lib\rt.jar" \   -source 1.8 -target 1.8 com/foreach/MajorMinorApp.java 

Вышеупомянутое относится в основном к JDK 8 и ниже. В JDK 9 параметр –release был добавлен вместо -source и -target . Опция –release поддерживает цели 6, 7, 8, 9, 10 и 11.

Давайте используем –release для Java 8:

 javac --release 8 com/foreach/MajorMinorApp.java 

Теперь мы можем запустить наш код на Java 8 или выше JRE.

4. Затмение IDE​

Теперь, когда мы поняли ошибку и общий подход к ее исправлению, давайте возьмем то, что мы узнали, и посмотрим, как мы можем применить это при работе в Eclipse IDE.

4.1. Изменение JRE​

Предполагая, что у нас уже настроен Eclipse с различными версиями Java , давайте изменим JRE нашего проекта.

Перейдем в свойства нашего проекта , затем в Java Build Path , а затем во вкладку Libraries . Оказавшись там, мы выберем JRE и нажмем « Изменить » :

./61aa7c0917f491371e1f00d1ac9d06d9.jpg

Теперь давайте выберем Alternate JRE и укажем нашу установку Java 11:

./cd1306ff9bf284db410b847ee3495eec.jpg

На этом этапе наше приложение будет работать с Java 11.

4.2. Изменение уровня компилятора​

Теперь давайте посмотрим, как мы можем изменить нашу цель на более низкий уровень Java.

Во-первых, давайте вернемся к свойствам нашего проекта , затем к компилятору Java , а затем поставим галочку напротив Enable projectspecific settings :

./61799b970b4012c3acadae0007346fbf.jpg

Здесь мы можем настроить наш проект на компиляцию для более ранних версий Java и настроить другие параметры соответствия:

./821ebeb40c454e738bcb62007927b9eb.jpg

5. IntelliJ ИДЕЯ​

Мы также можем контролировать версию Java, используемую для компиляции и запуска в IntelliJ IDEA.

5.1. Добавление JDK​

Прежде чем мы это сделаем, мы увидим, как добавить дополнительные JDK. Перейдем в Файл -> Структура проекта -> Настройки платформы -> SDK :

./394c596cce3303090068f6f994e62c3d.jpg

Давайте щелкнем значок плюса в среднем столбце, выберем JDK из раскрывающегося списка и выберем расположение нашего JDK:

./61621f4c2acac1c3d38eefc41c779cdc.jpg

5.2. Изменение JRE​

Во-первых, мы рассмотрим, как использовать IDEA для запуска нашего проекта в более новой версии JRE.

Перейдем к Run -> Edit Configurations… и изменим нашу JRE на 11:

./4afc9e5bb67ccf262644e15bdaafa536.jpg

Теперь, когда мы запускаем наш проект, он будет работать с Java 11 JRE.

5.3. Изменение уровня компилятора​

Если мы распространяем наше приложение для работы на более низкой версии JRE, нам нужно настроить уровень нашего компилятора, чтобы он ориентировался на более старую версию Java.

Перейдем в File -> Project Structure… -> Project Settings -> Project и изменим наш Project SDK и уровень языка Project :

./204e642ce8b7f4f51440cbf41b46c512.jpg

Теперь мы можем собрать наш проект, и сгенерированные файлы классов будут работать на Java 8 и выше.

6. Мавен​

Когда мы создаем и упаковываем файл в Maven , мы можем управлять целевой версией Java .

При использовании Java 8 или старше мы устанавливаем источник и цель для подключаемого модуля компилятора.

Давайте установим источник и цель, используя свойства плагина компилятора:

 properties>   maven.compiler.target>1.8maven.compiler.target>   maven.compiler.source>1.8maven.compiler.source>   properties> 

В качестве альтернативы мы можем установить источник и цель в плагине компилятора:

 plugins>   plugin>   artifactId>maven-compiler-pluginartifactId>   configuration>   source>1.8source>   target>1.8target>   configuration>   plugin>   plugins> 

С опцией –release , добавленной в Java 9, мы также можем настроить ее с помощью Maven.

Давайте используем свойство плагина компилятора, чтобы установить выпуск :

 properties>   maven.compiler.release>8maven.compiler.release>   properties> 

Или мы можем настроить плагин компилятора напрямую:

 plugins>   plugin>   artifactId>maven-compiler-pluginartifactId>   configuration>   release>8release>   configuration>   plugin>   plugins> 

7. Заключение​

В этой статье мы узнали, что вызывает сообщение об ошибке java.lang.UnsupportedClassVersionError: Unsupported major.minor version и как это исправить.

Оцените статью