Как исправить java.lang.UnsupportedClassVersionError: Неподдерживаемая версия major.minor

Я пытаюсь использовать Notepad++ в качестве инструмента "все в одном" для редактирования, запуска, компиляции и т.д.

У меня установлена JRE, и я установил переменную пути в каталог .../bin.

Когда я запускаю свой "Hello world" в Notepad++, я получаю это сообщение:

java.lang.UnsupportedClassVersionError: test_hello_world :
 Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
       .........................................

Я думаю, что проблема здесь в версиях; некоторые версии Java могут быть старыми или слишком новыми.

  1. Как мне это исправить?
  2. Должен ли я установить JDK и установить переменную пути в JDK вместо JRE?
  3. В чем разница между переменной PATH в JRE или JDK?

Ответ 1

Показанный номер версии описывает версию JRE, с которой совместим файл класса.

Сообщаемые основные цифры:

Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

(Источник: Википедия)

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

Например, чтобы создать файлы классов, совместимые с Java 1.4, используйте следующую командную строку:

javac -target 1.4 HelloWorld.java

В более новых версиях компилятора Java вы, скорее всего, получите предупреждение о том, что путь к классу начальной загрузки не задан. Дополнительную информацию об этой ошибке можно найти в сообщении в блоге Новое предупреждение javac для установки более старого источника без пути загрузки bootclasspath.

Ответ 2

java.lang.UnsupportedClassVersionError происходит из-за более высокого JDK во время компиляции и более низкого JDK во время выполнения.

Ответ 3

В Eclipse я просто подошел к команде меню Window → Preferences → Java → Compiler, а затем установил "Уровень соответствия компилятора" на 1.6.

Ответ 4

Не волнуйся, я решил его решить.

На самом деле это просто: вам нужно установить BOTH JRE/JDK с той же версией.

JRE 6 → JDK 6

JRE 7 → JDK 7

И так далее.

Ответ 5

Эта ошибка означает, что вы пытаетесь загрузить файл класса Java, который был скомпилирован с более новой версией Java, чем вы установили.

Например, ваш файл .class мог быть скомпилирован для JDK 7, и вы пытаетесь запустить его с помощью JDK 6.

Таким образом, решение будет либо:

  • Обновите среду выполнения Java или
  • Перекомпилируйте класс, если у вас есть источник, используя локальный компилятор Java (если он у вас есть).

    javac FileName.java

Для разработчиков это может произойти, если другой разработчик проверяет файл .class, и у них есть более новая версия java, чем у вас есть.

Ответ 6

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

Как вы получаете

Unsupported major.minor version 51.0

и версия 51.0 соответствует J2SE 7, вы, скорее всего, скомпилировали свой код на Java 7 и попытались запустить его с использованием более низкой версии. Проверьте, что отображается java -version. Это должна быть версия Java 7. Если не внести соответствующие изменения в PATH/JAVA_HOME. Или вы можете скомпилировать ту же версию, которую вы пытаетесь запустить. Если конфигурации запутаны, вы всегда можете указать абсолютный путь /home/user/jdk1.7.0_11/bin/javac и /home/user/jdk1.7.0_11/bin/java.

Ответ 7

У меня была аналогичная ситуация на Mac, и для меня работал следующий процесс:

В терминале введите

vi ~/.profile

Затем добавьте эту строку в файл и сохраните

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

где версия является той, что на вашем компьютере, например 1.7.0_25.

Выйдите из редактора, затем введите следующую команду, чтобы она стала эффективной.

source ~/.profile 

Затем введите java -version, чтобы проверить результат

java -version 

Что такое .profile файл?

Файл

.profile является скрытым файлом. Это необязательный файл, который сообщает системе, какие команды запускаться, когда пользователь, чей файл профиля находится в нем. Например, если мое имя пользователя - bruno, и в файле/Users/bruno/содержится все .profile файл, все его содержимое будет выполняться во время процедуры входа в систему.

Источник: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

Ответ 8

В меню Eclipse Окно → Настройки → Java → Проверка компилятора также "Настроить параметры проекта".

Если у вас есть ошибка с той же версией Java: попробуйте вручную удалить папку сборки вашего проекта. Затем перезапустите Eclipse.

Ответ 9

У вас может быть библиотека JAR, скомпилированная в Java 7, и у вас есть только Java 6 как Java Runtime. Это может случиться с некоторыми новыми библиотеками.

Ответ 10

Наиболее распространенной проблемой является неправильная конфигурация вашей переменной JAVA_HOME, которая должна указывать на нужную библиотеку Java Development Kit, если у вас несколько установленных.

Чтобы найти папку SDK Java, выполните следующие команды:

jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'

Debian/Ubuntu

Чтобы проверить, какой java (openjdk) вы установили, проверьте через:

dpkg -l "openjdk*" | grep ^i

или

update-java-alternatives -l

Чтобы изменить его, используйте:

update-alternatives --config java

Префикс с sudo, если требуется.

чтобы выбрать альтернативную версию java.

Или проверьте, какие из них доступны для установки:

apt-cache search ^openjdk

Префикс с sudo, если требуется.

Затем вы можете установить, например:

apt-get install openjdk-7-jre

Префикс с sudo, если требуется.

Fedora, Oracle Linux, Red Hat

Установите/обновите соответствующий пакет с помощью:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

В пакете java-1.7.0-openjdk содержится только Java Runtime Environment. Если вы хотите разработать Java-программы, установите пакет java-1.7.0-openjdk-devel.

BSD

В коллекции портов FreeBSD имеется пакет OpenJDK 7, называемый openjdk7, который, вероятно, необходимо переконфигурировать.

Смотрите: Страница вики OpenJDK.

Окна

Просто установите соответствующую библиотеку Java SE Development Kit из сайта Oracle или установите

Дженкинс

Если вы столкнулись с этой проблемой с Jenkins, см.:

Однако выбор правильной версии Java (новее) с помощью update-alternatives должен работать.

Ответ 11

Я столкнулся с той же проблемой, когда работал с скриптом Ant для создания моего приложения.

Я использую Eclipse для разработки моего приложения, и я изменил версию компилятора в свойствах сборки проекта. Но это не сработало для меня. Затем я узнал, что могу предоставить версию компилятора в скрипте Ant.

Я изменил сценарий Ant в разделе, где он компилирует файлы Java.

<target name="build-java" depends="prepare-build">
    <echo message="Compiling java files"/>
    <javac ....
           target="1.5"...
    </javac>
</target>

Это помогло мне решить неподдерживаемую основную второстепенную проблему.

Ответ 12

Когда я установил JDK 1.7, проблема была решена.

Ответ 13

У меня такая же проблема с проектом, написанным в версии 1.7, и попытался выполнить в 1.6.

Мое решение в Eclipse:

  • Щелкните правой кнопкой мыши свой проект Свойства → Путь сборки Java → Библиотеки

  • Выберите свою Системную библиотеку JRE и нажмите Изменить справа и выберите целевую JRE.

  • Теперь перейдите в Компилятор Java слева и измените уровень соответствия компилятора на вашу цель.

Это сработало для меня.

Ответ 14

Как было сказано в другом месте несколькими людьми, Java-программа запускается на более старой версии Java, чем та, для которой она была скомпилирована. Он должен быть "скомпилирован" для обратной совместимости. Другими словами, существует несоответствие между исходными и целевыми версиями Java.

Изменение параметров в меню Eclipse не отвечает на исходный плакат, который сказал, что он не использует Eclipse. В OpenJDK javac версии 1.7 вы можете перекрестно скопировать для 1.6, если используете параметры -source и -target, а также предоставить файл rt.jar целевой версии (то есть старше) во время компиляции. Если вы действительно установите 1.6 JRE, вы можете указать на его установку (например,/usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar на Ubuntu,/usr/jdk/jdk1. 6.0_60/jre/lib/rt.jar на SunOS. Извините, я не знаю, где он находится в системе Windows). Например:

javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java

Похоже, вы можете просто скачать rt.jar из Интернета и указать на него. Это не слишком элегантно, хотя:

javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java

Ответ 15

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

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
       .....

ОБНОВЛЕНИЕ: установите source и target на 1.8, если вы используете JDK 8.

Ответ 16

Основываясь на этом...

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

В Eclipse щелкните правой кнопкой мыши проект в проводнике пакетов:

Путь сборки Настройка пути сборки

Под:

Путь сборки Java Библиотеки Добавить библиотеку Системная библиотека JRE > Установленные JRE Поиск.

Добавьте требуемую JRE, выбрав библиотеку в списке, доступном после завершения поиска.

Ответ 17

  • Если вы используете Maven, установите уровень компиляции Java. Откройте командную строку и напишите java -version для вашего уровня компиляции:

    Enter image description here

  • Если вы используете IntelliJ IDEA, выберите проект → Файл → Настройки → Развертывание выполнения сборки → Компилятор → Компилятор Java. Затем измените байтовый код как 1.7, как это изображение:

    Enter image description here

Ответ 18

У меня было такое же сообщение об ошибке при запуске Ant из Eclipse, но другие решения, упомянутые здесь, не помогли решить мою проблему. Самое забавное, что запуск Ant из командной строки Windows выполнялся нормально, поэтому в Eclipse была проблема с конфигурацией.

Оказалось, что в Eclipse вы можете указать среду, с которой должен работать Ant, и это было установлено как JRE вместо JDK.

  • Перейдите к: Run → External Tools → External Tools Configurations...
  • Выберите Ant build.xml для вашего проекта (если у вас несколько проектов)
  • Активировать вкладку "JRE"
  • Здесь была выбрана "Отдельная JRE: jre6". Когда я изменил это на JDK из серии 1.6 или 1.7, ошибка исчезла.

Ответ 19

Как это исправить?

Эта ошибка означает, что JRE, который используется для выполнения вашего кода класса, не распознает используемую версию Java. Обычно, поскольку версия Java, которая сгенерировала ваш файл класса (т.е. Скомпилировала его), является более новой.

Чтобы исправить это, вы можете

a) Скомпилируйте свои источники Java с той же самой или более старой версией компилятора Java, которая будет использоваться для ее запуска. т.е. установить соответствующий JDK.

b) Скомпилируйте свои источники Java с более новой версией компилятора Java, но в режиме совместимости. т.е. использовать параметр -target.

c) Запустите скомпилированные классы в JRE, которая является той же самой или новой версией, что и JDK для компиляции классов.

Вы можете проверить версии, которые вы используете в настоящее время, с помощью javac -version для компилятора и java -version для среды выполнения.

Должен ли я установить JDK и настроить свою переменную PATH на JDK вместо JRE?

Для компиляции, конечно же, установите и настройте конкретный JDK, который вы хотите.

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

В чем разница между переменной PATH в JRE или JDK?

Переменная среды PATH сообщает командной оболочке, где нужно искать введенную команду. Когда вы вводите java, интерпретатор командной оболочки будет просматривать все местоположения, указанные в переменной PATH слева направо, чтобы найти подходящий исполняемый файл java для выполнения. Если у вас установлено несколько версий Java - т.е. У вас есть исполняемый файл java в нескольких местах, указанных в переменной PATH, то первый, который встречается при движении слева направо, будет выполняться.

Команда компилятора javac и поставляется только с JDK. Команда выполнения java и поставляется с JDK и находится в JRE.

Вероятно, у вас установлена ​​одна версия (51.0 = Java 7) javac, и у вас также установлена ​​такая же версия java, но другая предыдущая версия java появляется ранее в PATH и поэтому вызывается вместо ожидаемого.

Ответ 20

Вы использовали более высокую версию JDK для компиляции и попыток запуска из более низкой версии JDK/JRE.

Чтобы проверить это, см. информацию о версии:

javac -version

java -version

Они будут разными, а javac будет иметь более высокий номер версии.

Чтобы обойти это, используйте java из версии JDK или если у вас есть более новая JRE/JDK, которая также будет работать.

which javac сообщит вам местоположение, например, /usr/bin/javac. Просто запустите прямо с помощью /usr/bin/java <program>.

ИЛИ вы можете установить переменную окружения в качестве постоянного решения.

Ответ 21

Сегодня это сообщение об ошибке появилось в нашем Tomcat 7 на Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 апреля 2014 г. 9:00:55 org.apache.catalina.core.StandardContext filterStart
SEVERE: Исходные стартовые фильтры struts2
java.lang.UnsupportedClassVersionError: controller/ReqAccept: Unsupported major.minor version 51.0 (невозможно загрузить класс controller.ReqAccept)

Приложение Struts скомпилировано с Java 7.

Оказалось, кто-то использует "сервис tomcat [stop/start]" для перезапуска Tomcat 7,

$ ps -ef | grep java
tomcat7 31783 1 32 20:13? 00:00:03/usr/lib/jvm/default-java/bin/java...
$/usr/lib/jvm/default-java/bin/java -version
java-версия "1.6.0_27"

Который вызывает ошибку "Неподдерживаемый major.minor version 51.0".

Когда мы использовали "/etc/init.d/tomcat7 [stop/start]" для перезапуска Tomcat 7, проблема была решена.

$ ps -ef | grep java
tomcat7 31886 1 80 20:24? 00:00:10/usr/local/java/jdk1.7.0_15/bin/java
$/usr/local/java/jdk1.7.0_15/bin/java -version
java-версия "1.7.0_15"

Ответ 22

Если бы я вернулся к Java 6 и попытался запустить классы, ранее скомпилированные с помощью Java 7. Для меня работала Preferences > java > compiler → установить уровень соответствия 1.6 и, в решающей степени, "настроить параметры проекта".

Ответ 23

Я решил это. Я побежал:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

Ошибка вводит в заблуждение, Unsupported major.minor version 51.0. Это создает впечатление, что версия 51 (Java 7) не поддерживается. И мы должны использовать Java 6.

Ошибка должна быть:

Текущая версия Java, 50, не поддерживается. Вместо этого используйте Java версии 7 (51: 0 и выше).

Ответ 24

Ваш файл Java скомпилирован с другой версией (более поздняя версия компилятора), чем версия (более низкая версия исполнения), с которой вы пытаетесь запустить ее.

Понятно, что классы, скомпилированные с более низкими версиями, будут запускаться в более поздних версиях. Но противоположное (скомпилированное с более высокой версией компилятора и пытающееся запустить его с более низкой версией исполнения), иногда невозможно.

Следовательно, вам будет показана эта ошибка при попытке выполнить вашу программу. Неподдерживаемая версия major.minor x.x

Q: Я создал приложение в Java 7, но когда мои пользователи пытаются запустите его, они получают неподдерживаемую ошибку major.minor версии 51.0. Какие это означает и что я могу с этим сделать?

A: Если вы скомпилируете приложение с помощью javac в Java 7, то в результате файлы классов будут иметь номер версии версии 51.0. Версии Java до 7 не распознает этот номер, поэтому ваши пользователи будут иметь для перехода на Java 7 до запуска приложения. Если вы не используя любые Java 7 API, вы можете попытаться скомпилировать ваше приложение, используя javac -target 1.6 для создания 1.6-совместимого класса. Если ваш приложение развертывается с помощью webstart, вы можете указать минимальное требуется версия. Для получения дополнительной информации см. Документы в Java Web Start и JNLP здесь. Эта проблема исчезнет, ​​когда мы запустим autoupdate для Java 7 для конечных пользователей, которые в настоящее время имеют Java 6 на своих рабочих столах. сроки для этого еще не определены, мы хотим дать разработчикам чтобы сначала решить любые проблемы между их кодом и JDK 7.

(Источник: oracle.com.)

Ответ 25

О Mac OS X Я смог решить эту проблему, установив переменную JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home

Ответ 26

Сначала позвольте получить некоторые основы правильно...

JRE является компонентом в NetBeans/Eclipse/standalone, который будет предоставлять вам библиотеки, JVM, плагины Java и веб-начало Java. Обратите внимание, что он не предоставляет компиляторов или отладчиков.

JDK - это надмножество JRE наряду с compliers и debuggers.

Итак, когда у вас есть библиотека по умолчанию как JRE вместо JDK, у вас будет приятное время для импорта, но она не будет компилироваться.

Вместо этого укажите свой путь к JDK (я использую NetBeans, и я установил их с помощью netbeans.conf в netbeans/etc/netbeans.conf и изменил путь).

Ответ 27

У меня возникла проблема, из-за которой мне приходилось запускать компиляцию Maven в моем проекте из командной строки для запуска моих модульных тестов; если я внес изменения в тестовый класс и позволю Eclipse автоматически перекомпилировать его, тогда я получил ошибку "Неподдерживаемый major.minor version 51.0".

У меня есть как JDK6, так и JDK7, но все мои настройки JRE указывали на 1.6, как на pom, так и на странице свойств проекта в Eclipse. Ни один проект Maven Update Project и/или обновление не разрешили это.

Наконец, я попытался закрыть проект и снова открыть его, и это, похоже, исправить! НТН

Ответ 28

Вы скомпилировали свой Java-класс с JDK 7, и вы пытаетесь запустить тот же класс на JDK 6.

Ответ 29

  • Установите JDK 7.0.55 и установите Java для Eclipse для JDK 7.0.55.
  • Создайте проект с помощью JDK 7.0.55, настроив на пути сборки JDK 7.0.55.
  • Установите компилятор в Eclipse для JDK 7.0.55 в меню Windows → Настройки → Java → Компилятор - выберите 1.7.

Ответ 30

В моем случае проблема была в конфигурации сервера:

Server Runtime Environment

Проверьте, является ли JRE нужной вам версией:

enter image description here

Проект был в версии 1.7, а JRE сервера был установлен как 1.6, после перехода на правильную версию java он запустился нормально.