java.lang.UnsupportedClassVersionError: Неверный номер версии в файле .class? - PullRequest
140 голосов
/ 18 марта 2010

Я получаю эту ошибку, когда включаю библиотеку с открытым исходным кодом, которую мне пришлось скомпилировать из исходного кода. Теперь все предложения в Интернете указывают на то, что код был скомпилирован в одной версии и выполнен в другой версии (новая на старой). Тем не менее, у меня есть только одна версия 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

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

Ответы [ 10 ]

184 голосов
/ 18 марта 2010

Я узнал, что подобные сообщения об ошибках обычно верны. Когда это НЕ МОЖЕТ (на ваш взгляд) быть тем, о чем говорится в сообщении об ошибке, вы отправляетесь на поиски проблемы в другой области ... только спустя несколько часов узнаете, что исходное сообщение об ошибке действительно было правильным.

Поскольку вы используете 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

9 голосов
/ 18 марта 2010

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

Можете ли вы скомпилировать и запустить "javac" и "java" прямо из командной строки? Это работает правильно?

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

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

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

5 голосов
/ 18 марта 2010

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

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

2 голосов
/ 02 декабря 2015

Я тоже получил такую ​​же ошибку. Причиной тому я стал компилировать проект с использованием 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 как enter image description here

1 голос
/ 17 апреля 2013

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

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">
0 голосов
/ 24 января 2019

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

0 голосов
/ 17 марта 2016

изменение проекта для использования Java 1.7: чтобы это работало, выполните следующие шаги:

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

Не работает?

  • удаление проектов Bin directory
  • Clean
  • Rebuild

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

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

Удачи!

0 голосов
/ 29 марта 2014

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

0 голосов
/ 22 мая 2013

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

0 голосов
/ 01 апреля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...