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.