Java.lang.UnsupportedClassVersionError: неверный номер версии в .class файле?

Я получаю эту ошибку, когда включаю библиотеку с открытым исходным кодом, которую мне пришлось скомпилировать из источника. Теперь все предложения в Интернете показывают, что код был скомпилирован в одной версии и выполнен в другой версии (новый по старой). Однако у меня только одна версия JRE на моей системе. Если я запустил команды:

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

и проверьте в Eclipse свойства java-библиотеки, я получаю 1.5.0_18

Поэтому я должен заключить что-то другое, внутреннее для самого класса, бросает исключение? Возможно ли это?

Ответ 1

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

Поскольку вы используете Eclipse, я думаю, что у Thilo это правильно. Вероятнее всего, вы получаете это сообщение, потому что один из ваших проектов составляет 1.6 класса. Неважно, есть ли у вас только 1.5 JRE в системе, потому что Eclipse имеет свой собственный компилятор (а не javac), и для компиляции 1.6 классов требуется только 1,5 JRE. Это может быть странно, и настройка должна быть отключена, чтобы это разрешить, но мне просто удалось это сделать.

Для рассматриваемого проекта проверьте свойства проекта (обычно Alt + Enter), раздел Java Compiler. Здесь изображен проект, сконфигурированный для компиляции 1.6, но с 1,5 JRE.

enter image description here

Ответ 2

Вы пробовали делать "чистую", а затем перестраивать в Eclipse (Project- > Clean...)?

Можно ли скомпилировать и запустить с помощью javac и java прямо из командной строки? Правильно ли это работает?

Если вы щелкните правой кнопкой мыши на своем проекте, перейдите в "Свойства", а затем перейдите к "Путь сборки Java", есть ли какие-либо подозрительные записи под любой вкладкой? Это, по сути, ваш CLASSPATH.

В настройках Eclipse вы также можете дважды проверить раздел "Установленные JRE" в разделе "Java" и убедиться, что он соответствует тому, что вы думаете.

У вас определенно есть устаревший файл .class, расположенный где-то, или вы получаете несоответствие времени компиляции/времени выполнения в версиях Java, которые вы используете.

Ответ 3

Вы скомпилировали с Eclipse? Он использует другой компилятор (не javac). Это не должно приводить к этой ошибке (если все настроено правильно), но вы можете попытаться скомпилировать ее с помощью javac.

Если это устранит проблему, попробуйте проверить, есть ли у Eclipse некоторые неправильные настройки компилятора. В частности, он нацелен на Java 5.

Ответ 4

Я также получил ту же ошибку. Причина, по которой я составлял проект с использованием Maven. У меня был JAVA_HOME, указывающий на JDK7, и, следовательно, java 1.7 использовался для компиляции, а при запуске проекта я использовал JDK1.5. Изменение этой записи в файле .classpath или изменение затмения, как на скриншоте, решило проблему.

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

или изменить конфигурацию запуска eclipse как введите описание изображения здесь

Ответ 5

Также проверьте любые файлы jar в проекте, которые были скомпилированы для более высокой версии Java. Если это ваши собственные библиотеки, вы можете исправить это, изменив атрибут целевой версии на javac

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">

Ответ 6

Другой сценарий, когда это может произойти, - это когда вы запускаете экземпляр eclipse (для отладки и т.д.) из затмения хоста - в этом случае изменение уровня проекта или библиотеки JRE на пути к классу проекта не помогает. Важно то, что JRE используется для запуска целевой среды затмения.

Ответ 7

Всегда проверяйте также очевидное. Я получил эту ошибку один раз, когда я случайно захватил неправильный ресурс для сервера, чтобы добавить и удалить действие. Его легко упускать из виду.

Ответ 8

Также удаляются файлы настроек проекта (рабочее пространство Eclipse/папка проекта /.settings/) из папки проекта. Очевидно, нам нужно сделать проект чистым и построить после удаления.

Ответ 9

изменение проекта на использование java 1.7: для этого выполните следующие действия:

  • Изменить уровень соответствия компилятора
  • Измените свои проекты JRE/JDK на один и тот же уровень (1,7 в моем случае)
  • Выполните те же изменения во всех проектах, на которые ссылается ваш проект.
  • Измените конфигурацию прогона/отладки, чтобы использовать JRE/JDK (или того же уровня)

Не работает?

  • удалить проекты Каталог корзины
  • Clean
  • Перестроить

Все еще не работает?

в каталоге проекта: отредактируйте .settings/org.eclipse.jdt.core.prefs > убедитесь, что ваш целевой уровень применен

Удачи!

Ответ 10

Я решил эту проблему, изменив JRE требуется для сервера (в моем случае это Tomcat). На вкладке "Сервер" в Eclipse дважды щелкните сервер (чтобы открыть страницу для конфигурации сервера), нажмите "Среда выполнения", затем измените JRE.