Как исправить java.ленг.UnsupportedClassVersionError: неподдерживаемый major.вспомогательная версия

Я пытаюсь использовать Блокнот++ как мой инструмент "все-в-одном" редактировать, запускать, компилировать и т. д.

Я JRE установлен ,и я настроил переменную path на.../каталог 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?

30 ответов


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

сообщил основные цифры:

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.


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


в Eclipse я просто пошел в команду меню Окно ->предпочтения ->Java ->компилятор, а затем установите" уровень соответствия компилятора " в 1.6.


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

Это на самом деле просто - вам нужно установить оба JRE / JDK с той же версией.

JRE 6 - > JDK 6

JRE 7 - > JDK 7

и так далее.


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

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

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

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

    имя файла javac.java

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


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

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

Unsupported major.minor version 51.0

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


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

в терминале, типа

vi ~/.profile

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

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

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

выйдите из редактора, затем введите следующую команду make it become effective

source ~/.profile 

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

java -version 

что это .profile файл?

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

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


в меню Eclipse Окно ->предпочтения ->Java ->компилятор проверьте также "настройка конкретных параметров проекта".

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


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


наиболее распространенной проблемой является неправильная настройка вашего 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, Красный Шляпа!--19-->

установить/обновить соответствующий пакет через:

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 или установить

Дженкинс

если вы испытываете эту проблему с Дженкинсом, см.:

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


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

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

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

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

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


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


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

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

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

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

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

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


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

Изменение параметров в меню Eclipse не отвечает на оригинальный плакат, который сказал, что он / она не использует Eclipse. На OpenJDK в версии javac 1.7, вы можете crosscompile для 1.6, если вы используете параметры -source и -target, плюс указать!--7-->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 по-видимому, на Суносе. Извините, я не знаю, где он находится в системе 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

исходя из этого...

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 -> Установлен JREs ->Поиск.

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


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

    Enter image description here

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

    Enter image description here


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

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

  • перейти к: выполнить -> внешние инструменты -> внешние Конфигурации Инструментов ...
  • выберите сборку Ant.XML для вашего проекта (если у вас несколько проектов)
  • активируйте вкладку 'JRE'
  • здесь был выбран "отдельный JRE: jre6". Когда я изменил это на JDK из серии 1.6 или 1.7, ошибка исчезла.

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

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

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

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

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

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

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

должен ли я установить JDK и настроить свой путь переменная к JDK вместо среды JRE?

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

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

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

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

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

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


если вы столкнулись с этой проблемой при использовании 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>
       .....

UPDATE: set source и target to 1.8, Если вы используете JDK 8.


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

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

javac -version

java -version

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

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

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

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


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


сегодня, это сообщение об ошибке появилось в нашем Tomcat 7 на Ubuntu 12.04.2 LTS (Точный Панголин):

/var / log/tomcat7 / localhost.2014-04-08.log:
8 апреля, 2014 9:00:55 утра орг.апаш.Каталина.ядро.StandardContext filterStart
Серьезный: исключение запуска фильтра struts2
Ява.ленг.UnsupportedClassVersionError : controller/ReqAccept: неподдерживаемый major.минорная версия 51.0 (не удается загрузить класс контроллер.ReqAccept)

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

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

$ ПС-эф | грэп на Java
tomcat7 31783 1 32 20:13 ? 00:00: 03 /usr/lib/jvm/по умолчанию-java/bin/java...
$ / usr/lib/jvm/default-java/bin / java-версия
java версия "1.6.0_27"

что вызывает "неподдерживаемый основной.младшая версия 51.0" ошибка.

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

$ ПС-эф | грэп на 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"


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

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

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

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

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

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


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

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


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

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

сначала давайте сделаем некоторые основы правильно...

JRE, является компонентом NetBeans/затмение/standalone, который предоставит вам библиотеки, jvm, java-плагины и Java web start. Обратите внимание, что он не дает составителям или отладчики.

JDK является надмножеством JRE вместе с нарушителей и отладчики.

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

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


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

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

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


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


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

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

Server Runtime Environment

проверяем JRE имеет нужную вам версию:

enter image description here

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