Как исправить ошибку 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?

person ERJAN    schedule 30.04.2012    source источник
comment
вы также установили jdk? jre - это среда Java RunTime. Для создания приложений Java вам также понадобится jdk.   -  person CyprUS    schedule 30.04.2012
comment
да, я сделал, и теперь моя переменная пути указывает на то, где находится jdk. но у меня все еще есть эта неподдерживаемая дополнительная ошибка версии 51.0. Как вы думаете, мне следует установить старую версию jdk? Я использую jdk 1.7.0   -  person ERJAN    schedule 01.05.2012
comment
Это случилось со мной в Mac OS X, когда у меня были проблемы из-за странной ситуации с Apple java 6 и Oracle java 7 на OSX в наши дни. Краткая версия: Скомпилируйте с JDK7, запустите с JDK6, получите это.   -  person Warren P    schedule 07.10.2013
comment
В java имя класса должно начинаться с заглавной буквы;)   -  person Ashish Panery    schedule 03.02.2014
comment
Пожалуйста, посмотрите этот ответ. Это решит вашу проблему. stackoverflow.com/a/11612154/649451   -  person false9striker    schedule 20.02.2014
comment
Это также влияет на Xamarin Studio. Это отображается как предупреждение во время сборки: основная версия 51 новее 50, это самая высокая основная версия, поддерживаемая вашим компилятором. Установка 32-битной JRE7 решила проблему для меня.   -  person Barton    schedule 12.12.2014
comment
Для Эль-Капитана этот ответ исправил это для меня: stackoverflow.com/a/34201991/1615594   -  person tsuz    schedule 24.01.2016
comment
Вам следует обновить свой jre. Полезно использовать sudo update-alternatives --config java   -  person Emad Aghayi    schedule 10.05.2017
comment
Это конкретное исключение значительно выиграет, если будет изменено на Unsupported major.minor version 51.0 (Is your Java new enough?)   -  person Thorbjørn Ravn Andersen    schedule 27.06.2018


Ответы (51)


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

Сообщенные основные числа:

Java SE 17 = 61,
Java SE 16 = 60, 
Java SE 15 = 59,
Java SE 14 = 58,
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.

person Juha Palomäki    schedule 11.07.2012
comment
Показанный номер версии описывает, какая версия, если Java использовалась для компиляции кода. Нет, не работает. Он показывает версию JRE, с которой совместим файл класса. Использование параметров кросс-компиляции вы можете использовать JDK 1.7 для компиляции кода с версией класса от 1.1 (до 1.7). - person Andrew Thompson; 10.01.2013
comment
Этот ответ не объясняет, как это исправить, как задан вопрос? - person Jonathan Leung; 05.03.2013
comment
Это хорошее решение для компиляции в предыдущую версию напрямую из Eclipse: stackoverflow.com/a/16345710/2091700 - person Alphaaa; 23.05.2013
comment
IN eclipse project = ›Свойства =› java-компилятор; установите уровень соответствия компилятора версии, соответствующей вашему jre или jdk. Как по мне это 1.6 для jre 1.6 - person Sam; 25.09.2013
comment
Это может произойти, если исходный код компилятора не соответствует компилируемой в данный момент JRE / JDK. Например, я нашел следующие значения из папки eclipse .settings, org.eclipse.jdt.core.compiler.compliance = 1.7, org.eclipse.jdt.core.compiler.source = 1.7, org.eclipse.jdt.core.compiler .codegen.targetPlatform = 1.7. И мой компилятор был 1.6.0_32. Проблема решилась после изменения значений на 1,6. Проблема возникла после того, как я скопировал проект из другого рабочего пространства, где я использовал JDK 1.7 :( - person Gana; 22.12.2014
comment
В eclipse щелкните проект правой кнопкой мыши - ›щелкните свойства -› щелкните путь сборки Java на левой панели - ›Щелкните вкладку« Библиотеки »-› измените «Системную библиотеку JRE» на правильную версию. - person Kimchi Man; 27.01.2017
comment
Используйте следующую ссылку, если вы компилируете с помощью maven (для установки свойств maven.compiler.source и maven.compiler.target): maven.apache.org/plugins/maven-compiler-plugin/examples/ - person Youness; 29.06.2017
comment
Сработанное решение.Когда я изменил свою версию jdk с 1,7 до 1,8.Спасибо, Юха Паломяки. Вы сэкономили мое время - person chamzz.dot; 04.12.2017
comment
У меня возникла эта проблема при попытке запустить Glassfish 4.1.2. Поэтому я использовал переменную AS_JAVA в config\asenv.bat, чтобы указать на мою установку JDK7 вместо 6. И это сработало. - person Edward Quixote; 12.02.2019

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

person Vivek Kumar Ray    schedule 28.06.2012
comment
+1: изменение этой символической ссылки (/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java) на версию, используемую для компиляции с javac, решило эту проблему - person ezdazuzena; 06.08.2013
comment
Как я могу внести указанные выше изменения? - person Ankur Raiyani; 14.08.2013
comment
Проект - ›Свойства -› Компилятор Java Включение специальных настроек проекта. Затем выберите уровень соответствия компилятора 1,7, 1,6 или 1,5, создайте и протестируйте свое приложение. - person Vivek Kumar Ray; 16.08.2013
comment
Когда я перешел на Java 7, каким-то образом Eclipse продолжал пытаться работать на Java 6 ... не знаю почему. Удаление старого JDK помогло мне. - person HDave; 19.08.2013
comment
Нет. Скомпилируйте на 7 для 1.1, запустите на 1.4. - person nanofarad; 09.09.2013
comment
@ezdazuzena использует для этого sudo update-alternatives --config java. - person Thorbjørn Ravn Andersen; 29.01.2014
comment
исправление символической ссылки тоже сработало для меня, я просто удалил символическую ссылку и повторно добавил ее, чтобы указать на более новую java, хотя я, честно говоря, не уверен, почему это сработало, но это сработало :) - person Mark; 31.05.2014
comment
@ ThorbjørnRavnAndersen Спасибо, кстати, сначала мне нужно sudo update-alternatives --install /usr/bin/java java /opt/jdk/bin/java 1. - person Weekend; 12.06.2017
comment
Во время выполнения требуется только JRE, поэтому ответ должен заканчиваться ... и более низким JRE во время выполнения. - person mjn; 28.01.2020

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

person Cacovsky    schedule 02.05.2013
comment
В eclipse иногда также необходимо изменить аспекты проекта на соответствующую версию java. - person Bilal Mirza; 04.07.2013
comment
Спасибо. Стоит отметить, что установка среды выполнения Eclipse по умолчанию (JRE, которая идет по пути сборки) - это отдельный параметр. Я установил JRE, но не уровень соответствия компилятора; это исправило это. - person wchargin; 26.01.2014
comment
И как вы сделали вывод из сообщения об ошибке, что это правильное место для установки опции? - person Alexander; 24.10.2015
comment
Может быть, это: stackoverflow.com/questions/7073485/ может помочь, если вы используете ant и eclipse. - person OuuGiii; 02.08.2017
comment
Речь идет о Notepad ++, а не о Eclipse. - person gotwo; 23.02.2020

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

На самом деле это просто - вам нужно установить ОБЕ JRE / JDK с одной и той же версией.

JRE 6 -> JDK 6

JRE 7 -> JDK 7

И так далее.

person ERJAN    schedule 04.05.2012
comment
java 7 также может обрабатывать 6 без проблем. - person damienix; 31.10.2013
comment
@damienix Вы, вероятно, захотите указать, что Java 7 JRE может без проблем обрабатывать скомпилированный класс Java 6, иначе ваш оператор приведет к путанице. - person Frontear; 12.12.2019

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

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

Итак, решение состоит в следующем:

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

    javac FileName.java

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

person Brad Parks    schedule 20.02.2013

Вы пытаетесь запустить свою программу с версией 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.

person Aniket Thakur    schedule 01.10.2013

У меня была аналогичная ситуация на 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, а файл .profile находится в / Users / bruno /, все его содержимое будет выполняться во время процедуры входа в систему.

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

person Tony    schedule 11.02.2014

В меню Eclipse Окно -> Настройки -> Java -> Компилятор также отметьте «Настроить параметры для конкретного проекта».

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

person Andreas L.    schedule 06.08.2013

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

person Rio    schedule 25.06.2013

Наиболее частая проблема - неправильная конфигурация вашей переменной 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

or:

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. Если вы хотите разрабатывать программы на Java, установите пакет java-1.7.0-openjdk-devel.

BSD

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

См. страницу вики OpenJDK.

Окна

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

Дженкинс

Если у вас возникла эта проблема с Jenkins, см.

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

person kenorb    schedule 04.04.2015
comment
Этот ответ сработал для меня при попытке использовать spark2-shell на хосте после добавления службы Spark в кластер с cloudera. - person Alter; 25.11.2017

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

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

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

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

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

person Mandar Pandit    schedule 14.10.2013

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

person user3168034    schedule 07.01.2014

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

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

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

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

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

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

person Ben    schedule 01.09.2014

Как ответили в другом месте несколько человек, программа 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
person Mace Ojala    schedule 16.09.2013

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

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, выбрав библиотеку в списке, доступном после завершения поиска.

person Adit Ya    schedule 28.05.2014

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

    Введите здесь описание изображения

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

    Введите описание изображения здесь

person ethemsulan    schedule 03.11.2015
comment
Мне также нужно было выполнить чистую установку maven после изменения pom. - person Joe Borysko; 22.09.2016

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

 <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.

person Thamme Gowda    schedule 10.03.2014
comment
фрагмент о том, как использовать плагин для кросс-компиляции, был бы очень хорош вместо посещения / открытия ссылки - person coding_idiot; 01.11.2014

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

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

  • Перейдите к: Выполнить -> Внешние инструменты -> Конфигурации внешних инструментов ...
  • Выберите Ant build.xml для своего проекта (если у вас несколько проектов)
  • Активируйте вкладку JRE
  • Здесь был выбран «Отдельный JRE: jre6». Когда я изменил это на JDK из серии 1.6 или 1.7, ошибка исчезла.
person ckielstra    schedule 11.02.2014

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

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

javac -version

java -version

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

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

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

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

person L Lawliet    schedule 24.09.2014

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

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

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

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

б) Скомпилируйте исходные коды 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 и поэтому вызывается вместо тот, которого вы ожидаете.

person Vihung    schedule 26.03.2015

Возникла эта проблема, когда я вернулся к Java 6 и попытался запустить классы, ранее скомпилированные с Java 7. Что сработало для меня, так это Preferences> java> compiler -> установить уровень соответствия на 1.6 и, что особенно важно, «настроить параметры проекта» ..

person user3534268    schedule 15.04.2014

Сегодня это сообщение об ошибке появилось в нашем 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: неподдерживаемая версия major.minor 51.0 (невозможно загрузить класс controller.ReqAccept)

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

Оказалось, что кто-то использует "service 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 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 -версия
версия java "1.7.0_15 "

person oraclesoon    schedule 08.04.2014

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

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 и выше).

person Siddharth    schedule 22.08.2014

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

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

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

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

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

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

person Manohar    schedule 13.09.2016

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

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
person TomTom    schedule 09.04.2015

Сначала давайте разберемся с основами ...

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

JDK - это надмножество JRE вместе с компиляторами и отладчиками.

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

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

person Creative_Cimmons    schedule 19.03.2014

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

Среда выполнения сервера

Убедитесь, что JRE - это та версия, которая вам нужна:

введите здесь описание изображения

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

person Mike-Bell    schedule 06.03.2018
comment
Спасибо! Ваш ответ действительно помог мне, так как я изменил конфигурацию сервера в другом месте, но проблема все еще возникла; после вашего ответа проблема была решена. Я изменил конфигурации следующим образом: 1) открыть обзор сервера в Eclipse 2) открыть конфигурацию запуска 3) перейти на вкладку classpath 4) добавить bootrap и пользовательские записи для нового JRE / JDK 5) удалить старые записи 6) применяется и закрывается. Надеюсь, это поможет кому-то избежать такой ошибки. - person P. Vucinic; 21.07.2020

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

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

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

person Matthew Wise    schedule 18.06.2014

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

person Sagar Varpe    schedule 26.06.2014

  • Установите JDK 7.0.55 и установите Java для Eclipse для JDK 7.0.55.
  • Скомпилируйте проект с помощью JDK 7.0.55, настроив путь сборки JDK 7.0.55.
  • Установите компилятор в Eclipse для JDK 7.0.55 в меню Windows -> Preferences -> Java -> Compiler - выбираем 1.7.
person siddmuk2005    schedule 04.08.2014

Ответ к проблеме:

Исключение в потоке "main" java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: неподдерживаемая версия major.minor 52.0

У меня была такая же проблема. Для тех, у кого возникла эта проблема в экземплярах AWS ec2 и каким-то образом перенаправили сюда на этот вопрос. Я отвечаю за них и хочу рассказать, как я это сделал. У меня возникла проблема, потому что на инстансах Amazon EC2 была запущена версия java 1.7, и, возможно, мой проект был несовместим с ней, потому что я использовал Maven, и он был предварительно настроен для java 1.8. Итак, я установил новую версию java:

sudo yum -y install java-1.8.0

И тогда важный шаг - удалить старую версию:

sudo yum remove java-1.7.0-openjdk

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

person Siddharth Choudhary    schedule 10.11.2018

Поскольку java 9 -target заменяется на --release.

До java 11 доступны номера для --release: 6 7, 8, 9, 10, 11.
И вы можете догадаться, что будущие версии будут 12, 13, и продолжайте.

Чтобы скомпилировать для более старого целевого jvm, используя javac --release 7 Tmp.java // это сгенерирует файл .class, который может работать на jvm> = 7,

Затем вы можете проверить целевую версию через:

javap -v Tmp | grep version

в выходных данных major version идентифицирует целевую версию jvm.

  • 55 -> Java 11
  • 54 -> Java 10
  • 53 -> Java 9
  • 52 -> Java 8
  • 51 -> Java 7
  • 50 -> Java 6

В следующей версии будут удалены более старые версии:

  • Начиная с java 11, основные версии ‹= 49 (java version‹ = 5) не поддерживаются.
  • Начиная с Java 12 и 13, основные версии ‹= 50 (java version‹ = 6) не поддерживаются.

Вы можете узнать, какие целевые версии поддерживаются текущим javac, с помощью команды:
javac -help | grep releases

person user218867    schedule 08.01.2019

Еще один способ исправить это в Mac OS X с установленным Homebrew - это :

brew install Caskroom/cask/java
person webtweakers    schedule 04.08.2015

Я столкнулся с той же проблемой, и я исправил ее в Linux.

Проверьте свой $JAVA_HOME

Требуется JDK 1.8 для компиляции / сборки APK

Установите Java JDK 1.8 и измените JAVA_HOME

Отредактируйте ~/.bashrc и добавьте путь к JDK 1.8 как JAVA_HOME.

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/

И source ~/.bashrc

Закройте текущее окно / вкладку терминала и запустите $JAVA_HOME, чтобы проверить путь.

person Mohammed Safeer    schedule 18.03.2017

Все перепробовала. Переустановка Tomcat - вот что наконец сработало. Вот что я проверил перед переустановкой.

Убедитесь, что ваши переменные окружения выглядят так.

$ echo $JAVA_HOME
C:\Program Files\Java\jdk1.7.0_51\
$ echo $JRE_HOME
C:\Program Files\Java\jdk1.7.0_51\jre\bin

Убедитесь, что Eclipse использует тот же jre, который вы установили для JAVA_HOME (если JAVA_HOME не установлен, он будет смотреть на JRE_HOME). Window > Prefrences > Java > Installed JREs (отмечен флажок по умолчанию)

Если вы внесли какие-либо изменения в любой из ваших файлов tomcat, особенно в catalina.bat или startup.bat, вы можете сказать tomcat, чтобы он посмотрел на другую версию java, чем та, которую вы установили на JAVA_HOME C:\Program Files (x86)\Apache\apache-tomcat-7.0.26\bin

person Philip Rego    schedule 18.07.2017

У меня та же проблема, и я исправил ее с помощью это решение на Mac. Надеюсь, это кому-то поможет. Это потому, что система не знает о более новой версии JDK, и по-прежнему указывает на старый JDK.

person Dilip Rajkumar    schedule 04.09.2014

У меня была такая же ситуация, но ни один из вышеперечисленных советов не помог :) В нашей среде у нас был tomcat, работающий как служба в Windows. Мы установили Java 1.7 и настроили JAVA_HOME в этой версии. Конечно, исходники были построены на Java 1.7. Тем не менее кот сказал, что использует предыдущую версию JVM. После глубокого анализа выяснилось, что служба Tomcat, установленная в Windows, по-прежнему сохраняет старое значение JAVA_HOME, указывающее на Java 1.6. После установки новой службы Tomcat все было решено. Итак, вывод: когда вы меняете версию java и tomcat, работающий как служба, вам необходимо переустановить службу tomcat.

person mariusz117    schedule 28.11.2014

Если у вас есть второй проект, добавленный в путь сборки, убедитесь, что он имеет ту же версию компилятора, что и ваш первый: Свойства -> Компилятор Java -> Уровень соответствия компилятора

person Luigi04    schedule 16.07.2016

  1. Щелкните Свойства в проекте.
  2. Перейдите в путь сборки Java.
  3. Щелкните Добавить библиотеку.
  4. Нажмите Далее в Системной библиотеке JRE. Выберите тот, который вам нужен, если он не выбран по умолчанию.
  5. Щелкните Готово.

Готово!

person AmazingDayToday    schedule 12.10.2016

Для меня я получал эту ошибку в классе com/sun/javadoc/Doclet. Покопавшись, я обнаружил, что случайно скопировал tools.jar из Java 8 в свою папку Java 7.

Поиск tools.jar для Java 7 и возвращение его в папку устранил мою проблему. Так что попробовать.

person snowfi6916    schedule 19.01.2017

У меня такая же проблема с IDE Spring Source Tool (STS) для Grails проект. Я проверил установленную версию Java, и версия Java проекта была 1.7. *. Позже я обнаружил, что в файле GGTS.ini версия Java была установлена ​​на 1.6:

Решение:

-Dosgi.requiredJavaVersion = 1.6 изменен на
-Dosgi.requiredJavaVersion = 1.7
Добавьте две строки ниже перед -vmargs
-vm
jdk1.7.0_21 / jre / lib / amd64 / server / libjvm. так

Задача решена. Удачного кодирования.

person Bhuwan Gautam    schedule 18.04.2015

Добавьте это в свой файл pom.xml:

<project ....>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

Где 1.7 - версия Java, которую вы собираетесь использовать. Это перезаписывает настройку компилятора Maven, поэтому отсюда можно отладить.

person George    schedule 01.09.2015

Я решил эту проблему, проверив, что зависимости Maven развертываются в сборке развертывания. В моем случае их не было.

Его добавление устранило проблему.

person antonkronaj    schedule 01.11.2015

Я использую OS X v10.11.5 (El Capitan), и я попытался установить JAVA_HOME и принудительно установить «правильную» версию Java через Maven. Ничего не помогло.

Проблема возникла, когда учетная запись OS X была отключена, пока приложение все еще работало. После повторного входа в систему OS X открыла старый сеанс терминала с неактивной историей. Я использовал тот же сеанс терминала для создания проекта, но потерпел неудачу из-за ошибки неподдерживаемой версии класса.

Очистка проекта Maven совершенно не помогла.

Чтобы решить проблему, мне просто пришлось закрыть автоматически открывающееся окно терминала и использовать новое.

person lilalinux    schedule 20.07.2016

вы можете указать «цель» для компилятора в файле build.xml, если вы используете ant, как показано ниже:

 <target name="compile" depends="init">
    <javac executable="${JAVA_HOME}\bin\javac" srcdir="${src.dir}" target="1.6" destdir="${classes.dir}" debug="true"
        deprecation="true" classpathref="compile.classpath" encoding="utf8">
        <include name="**/*.java" />
    </javac>
</target>
person StrongYoung    schedule 19.06.2018

убедитесь, что вы проверяете версии переменных среды java, это может быть просто разница между версиями JAVA_HOME (путь JDK) и JRE_HOME (путь JRE), которые вызывают проблему

person Seif Tml    schedule 13.01.2019

Как вы знаете, всегда полезно иметь переменную среды Java_home для каталога bin jdk (Java Development Kit).

глядя на вашу проблему выше, кажется, что среда выполнения JRE ищет класс, который несовместим с библиотекой Superset JDk. Я бы порекомендовал иметь готовый пакет JDK и JRE или Jboss (если требуется) напрямую из источника загрузки Oracle, чтобы избежать подобных проблем.

person Rahul Mishra    schedule 08.04.2019

В моем случае проблема возникла из-за разных версий Java в $ JAVA_HOME и $ PATH.

echo $JAVA_HOME
/usr/lib/jvm/java-7-openjdk-amd64/jre
echo $PATH
/opt/jdk/jdk1.8.0_151/bin:/usr/lib/jvm/java-7-openjdk-amd64/jre/bin:/usr/local/bin:/usr/bin:/bin

Как только я обновил их до той же версии Java, проблема исчезла.

export JAVA_HOME=/opt/jdk/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
person nurb    schedule 14.08.2019

У меня была такая же проблема после перехода на JDK 6 для компиляции модуля зависимостей, затем он переключился на JDK 8.
Перезапустите задачу, и компилятор пожаловался на неподдерживаемую версию major.minor. Я проверил версию Java, она была 1,8 для JVM и Maven.
После многих попыток и поиска в Google проблема не была решена, так что я подумал, что, если я перезапущу компьютер (Windows 8)?
Я сделал перезапустите, перезапустите проект еще раз и проблема решена :)

person velocity    schedule 13.01.2020

Многие ответы относятся к IDE, например Eclipse. Однако вопрос касается нативной разработки с помощью Notepad ++.

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

1) Проверьте определение в переменной PATH. Если определено:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath

и / или

C:\ProgramData\Oracle\Java\javapath

Эти пути ссылаются на java / javac с фиксированной версией java. Вы можете проверить эти версии в этой папке с помощью javac -version. Результат может быть:

java version "1.8.0_231"

Это означает, что используется Java версии 8. Замените эти записи на %JAVA_HOME%\bin. Если JDK был установлен вручную, проверьте, установлен ли JAVA_HOME в среде. Если нет, добавьте его сюда, например с участием:

JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"

2) Я создал проект в командной строке с помощью gradle. В build.gradle было определено:

android {
    buildToolsVersion "24.0.1"
    dependencies {
        compile 'com.android.support:design:23.0.1'
        compile 'com.android.support:support-v4:23.0.1'
        ...
    }
    ...
}

Используемые build-tools dx-файлы новее других компонентов. Поэтому требуется модификация:

buildToolsVersion "23.0.1"

person gotwo    schedule 23.02.2020

Если кто-то использует Gradle, поместите это в build.gradle

java { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 }

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

person sudarshan    schedule 02.04.2020