Вопрос по jvm, java – Как исправить ошибку java.lang.UnsupportedClassVersionError: Неподдерживаемая версия major.minor

1471

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

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

Когда я запускаю мой & quot; Привет, мир & quot; в 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 может быть старой или слишком новой.

How do I fix it? Should I install the JDK, and setup my path variable to the JDK instead of JRE? What is the difference between the PATH variable in JRE or JDK?
Это случилось со мной в Mac OS X, когда у меня были проблемы из-за странной ситуации с Apple java 6 и Oracle java 7 в OSX в эти дни. короткая версия: скомпилируйте с JDK7, запустите с JDK6, получите это. Warren P
Для Эль-Капитана этот ответ исправил это для меня:stackoverflow.com/a/34201991/1615594 tsuz
да, я сделал, и теперь моя переменная пути указывает, где находится JDK. все же у меня все еще есть эта "неподдерживаемая минорная версия 51.0" ошибка, как вы думаете, я должен установить более старую версию JDK? я использую JDK 1.7.0 ERJAN
В java ClassName должно начинаться с заглавной буквы;) Ashish Panery
Вы также установили JDK? jre - это среда Java RunTime, для создания java-приложений также необходим jdk CyprUS

Ваш Ответ

30   ответов
3
Install JDK 7.0.55 and set the Java for Eclipse for JDK 7.0.55. Build the project with JDK 7.0.55 by configuring on build path JDK 7.0.55. Set the compiler in Eclipse for JDK 7.0.55 by menu Windows -> Preferences -> Java -> Compiler - choose 1.7.
14

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

11

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

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

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

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

Q: I have created an application in Java 7, but when my users try to run it they get an Unsupported major.minor version 51.0 error. What does this mean and what can I do about it?

A: If you compile an application using javac in Java 7, the resulting classfiles will have the 51.0 version number. Versions of Java prior to 7 do not recognize this number, so your users will have to upgrade to Java 7 prior to running your application. If you are not using any Java 7 APIs you can try to compile your application using javac -target 1.6 to create a 1.6-compatible classfile. If your application is deployed using webstart you can specify the minimum version required. For more information, see the docs on Java Web Start and JNLP here. This issue will go away once we trigger autoupdate to Java 7 for end-users currently having Java 6 on their desktops. The timeline for this is not yet determined, we want to give developers time to work out any issues between their code and JDK 7 first.

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

9

Если вы столкнулись с этой проблемой при использованииспециалист, вы можете кросс-компилировать свой код с помощью плагина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.

Error: User Rate Limit Exceeded
4

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

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

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

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

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

1850

Показанный номер версии описывает версию 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.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/16345710/2091700
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
"The version number shown describe which version if Java was used to compile the code." No it does not.Error: User Rate Limit Exceededcross-compilation optionsError: User Rate Limit Exceeded
14

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

Чтобы узнать, где находится папка Java SDK, выполните следующие команды:

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

Prefix with sudo if required.

выбрать альтернативную версию Java.

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

apt-cache search ^openjdk

Prefix with sudo if required.

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

apt-get install openjdk-7-jre

Prefix with sudo if required.

Fedora, Oracle Linux, Red Hat

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

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

The java-1.7.0-openjdk package contains just the Java Runtime Environment. If you want to develop Java programs then install the java-1.7.0-openjdk-devel package.

BSD

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

Увидеть:OpenJDK вики-страница.

Windows

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

Jenkins

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

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

Error: User Rate Limit Exceeded
18

У меня была похожая ситуация на 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 file is a hidden file. It is an optional file which tells the system which commands to run when the user whose profile file it is logs in. For example, if my username is bruno and there is a .profile file in /Users/bruno/, all of its contents will be executed during the log-in procedure.

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

10
  • If you use Maven, set your Java compile level. Open a command line and write java -version for your compile level:

    Enter image description here

  • If you use IntelliJ IDEA, select project → FileSettingsBuild Execution DeploymentCompilerJava Compiler. Then change byte code as 1.7 like this image:

    Enter image description here

Error: User Rate Limit Exceeded
12

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

346

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaError: User Rate Limit Exceeded
Error: User Rate Limit Exceededvivekraicdac.blogspot.in
Error: User Rate Limit Exceededsudo update-alternatives --config javaError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
12

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

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

  • Right click on your Project Properties -> Java Build Path -> Libraries

  • Select your JRE ,System Library and click Edit on the right, and choose the target JRE.

  • Now go to Java Compiler on the left, and change the Compiler compliance level to your target.

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

3

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

58

Не волнуйтесь, я понял это.

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

JRE 6 - & gt; JDK 6

JRE 7 - & gt; JDK 7

И так далее.

Error: User Rate Limit Exceeded
8

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

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

  • Go to: Run -> External Tools -> External Tools Configurations ...
  • Select the Ant build.xml for your project (if you have multiple projects)
  • Activate the Tab 'JRE'
  • Here was selected 'Separate JRE: jre6'. When I changed this to a JDK from the 1.6 or 1.7 series, the error was gone.
16

В меню EclipseWindow - & GT;Preferences - & GT;Java - & GT;Compiler отметьте также «Настроить параметры, специфичные для проекта».

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

5

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

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

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

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 щелкните правой кнопкой мыши проект в проводнике пакетов:

Build Path - & GT;Configure Build Path

Под:

Java Build Path - & GT;Libraries - & GT;Add Library - & GT;JRE System Library - & GT;Installed JREs - & GT;Search.

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

3

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

Server Runtime Environment

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

enter image description here

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

114

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

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededseparateError: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/7073485/…Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
22

Вы пытаетесь запустить свою программу с версией Java, которая не поддерживает версию, в которой был скомпилирован код.So basically you must have compiled your code with a higher version and trying to run it using a lower version.

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

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.

8

How do I fix it?

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

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

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

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

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

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

Should I install the JDK, and setup my PATH variable to the JDK instead of JRE?

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

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

What is the difference between the PATH variable in JRE or JDK?

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

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

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

6

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

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

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

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

The current Java version, 50, is unsupported. Use Java version 7 (51:0 and greater) instead.`

6

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

/var/log/tomcat7/localhost.2014-04-08.log:
Apr 8, 2014 9:00:55 AM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
java.lang.UnsupportedClassVersionError: controller/ReqAccept : Unsupported major.minor version 51.0 (unable to load class controller.ReqAccept)

Распорки Приложение скомпилировано с 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 version "1.6.0_27"

Что вызывает «Неподдерживаемый Major.minor версии 51.0» ошибка.

Когда мы использовали & quot; /etc/init.d/tomcat7 [stop / start] & quot; чтобы перезапустить 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 version "1.7.0_15"

6

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

3

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

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

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

7

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

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

javac -version

java -version

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

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

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

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

12

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

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

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

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

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

41

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

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

Таким образом, решение заключается в том, чтобы:

  • Upgrade your Java runtime or
  • Recompile the class if you have the source, using your local Java compiler (if you have one).

    javac FileName.java

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

Error: User Rate Limit Exceeded

Похожие вопросы