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

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


person grmn.bob    schedule 18.03.2010    source источник
comment
у вас есть скомпилированная версия библиотеки где-то еще, которая может быть первой в вашем пути к классам?   -  person Jeff Storey    schedule 18.03.2010
comment
Хорошая идея, но нет. Я сделал проверку, используя 'find . -имя '*.jar' | xargs locate из папки lib с файлами JAR. Кроме того, я не думал, что Eclipse использует CLASSPATH? Любые другие хорошие предложения?   -  person grmn.bob    schedule 18.03.2010
comment
как использовать эту команду find -name '*.jar' в cmd, поскольку я хочу снова перестроить код jre src... и для этого мне нужно запустить этот cmd.....javalobby.org/java/forums/t103334.html.....мой jdk находится в C:\Program Files\Java\jdk1.6.0_31   -  person Learner    schedule 22.04.2012


Ответы (10)


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

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

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

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

person Joshua McKinnon    schedule 18.03.2010
comment
Полностью согласен ... поэтому я задал в своем комментарии вопрос о способах точного определения. Я не знал о внутренних классах Eclipse. Библиотека была скомпилирована в командной строке с помощью javac и интегрирована в мой проект Eclipse. Я попробую скомпилировать свой проект из командной строки. Вы явно решили эту проблему в прошлом, и ваши предложения просто фантастические. - person grmn.bob; 18.03.2010
comment
Если у вас есть JDK (у которого есть исходники), вы сможете добавить несколько точек останова в Eclipse и, надеюсь, увидеть, какой класс он пытается загрузить. Самый простой способ - это, вероятно, точка останова в конструкторе для UnsupportedClassVersionError (или точка останова Eclipse Exception, значок «J!»), Затем вы можете проверить, как она туда попала. - person Joshua McKinnon; 18.03.2010
comment
В ПОРЯДКЕ. Я нашел эксперта в здании, и он смог указать Eclipse на ту же JRE, что и моя командная строка. Потом пересобрал с 1.6 и запустил с 1.6 и все работает. Очевидно, я ошибался, что у меня нет ничего, кроме 1,5. Он показал мне, где искать. Спасибо за помощь - теперь я на моей следующей проблеме! :) - person grmn.bob; 18.03.2010
comment
Я была такая же проблема. Моя ошибка заключалась в том, что я использовал 1.5 JRE и компилятор 1.6. Что не решило ошибку unsupportedclassversion. Поэтому я установил 1.6 JRE в свое затмение и использовал компилятор 1.6. Потом все стало нормально работать. - person Vanchinathan Chandrasekaran; 02.12.2010
comment
Отличный ответ. У меня есть несколько серверов xServer, которые не будут обновлены до версии 1.6. Кто бы мог подумать! - person Jim Geldermann; 14.10.2011
comment
Спасибо! По глупости предположил, что используется jre на пути сборки. Кроме того, может ли кто-нибудь объяснить, почему строка «Использовать соответствие из среды выполнения» недоступна в моем затмении? - person Adam; 03.01.2013
comment
Если вы похожи на меня и столкнулись с этой проблемой при использовании Eclipse и ANT, обязательно проверьте Project Propeties - Java Compiler, Eclipse Preferences - Java - Compiler и Java - Installed JREs, а также External Tool Configurations - JRE. - person Lucas Hoepner; 09.04.2013

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

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

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

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

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

person Brent Writes Code    schedule 18.03.2010
comment
да (полная очистка); не пробовал (проект из строки cmd); возможно/нет (я удалил записи из Eclipse Java Build Path); сделал это (JRE - вот где я получил версию #). - person grmn.bob; 18.03.2010

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

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

person Thilo    schedule 18.03.2010
comment
Это то, чему я учусь. Я собираюсь попробовать построить две части одинаково (строка cmd и/или eclipse). - person grmn.bob; 18.03.2010

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

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

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

person Vikky    schedule 02.12.2015

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

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

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

person Jay    schedule 01.04.2013

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

person James Drinkard    schedule 22.05.2013

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

person user3471219    schedule 29.03.2014

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

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

Не работает?

  • удалить каталог Bin проектов
  • Чистый
  • перестроить

До сих пор не работает?

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

Удачи!

person Li3ro    schedule 17.03.2016

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

person ocrampico    schedule 24.01.2019