Java 7 JVM VerifyError в Eclipse
Когда я компилирую свой проект в eclipse indigo с помощью JDK 7, я получаю следующее диалоговое окно ошибок
![enter image description here]()
со следующим stacktrace
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 32 in method ... at offset 0
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Я нашел соответствующую ошибку здесь и использовал предлагаемое решение об использовании опции jvm -XX:-UseSplitVerifier
, и хотя это работает, эта ошибка все еще меня смущает.
Кто-нибудь знает, почему это происходит и почему обходной путь... работает?
- Примечание -
Проект компилируется с использованием JDK 6.
Ответы
Ответ 1
Ошибка 353467 говорит о "использовании -XX:-UseSplitVerifier
для активации старого верификатора".
Это согласуется с JDK TM 6 Adoption Guide, в котором описывается этот параметр как:
Традиционный верификатор может быть принудительно с флагом -XX:-UseSplitVerifier
.
Отсутствующие или неверные атрибуты StackMapTable
для файлов классов версии 50.0
могут приводить к исключениям VerifyError
.
Инструменты, которые переписывают байт-код в файлах версии 50.0
версии и не могут корректно обновлять StackMapTable
, могут не проверять и запускать исключения.
Итак, комментарий от 2011-10-03 указывает, что:
Теперь AspectJ автоматически активирует ранее установленную опцию для создания стековых карт, если классы Java7.
Ответ 2
Когда у меня возникла эта проблема, я исправил ее, удалив мои системные библиотеки JDK 1.7 из проекта и вместо этого добавил 1,6 JDK-библиотеки. Я пошел снова запустить проект, и я не получил ошибку. Когда я снова добавил библиотеки JDK 1.7, он все еще работает, поэтому что-то в "swapping" заставляет его работать.
Ответ 3
mre, можете ли вы поделиться своим исходным кодом (или извлеченным образцом), который показывает эту ошибку при запуске? Я считаю, что это ошибка в компиляторе eclipse java и нуждается в исправлении.
Пожалуйста, откройте ошибку в eclipse bugzilla, если вы можете предоставить образец кода.
Ответ 4
Я ударил эту проблему в Juno, но разрешил ее, установив последнюю версию 4.2 с сайта обновления 4.2 здесь:
http://www.eclipse.org/ajdt/downloads/
То же самое, что @VonC дало год назад, но так как обновленный AspectJ теперь (но не в последнем репозитории Juno или с тем, что поставляется с Spring), теперь он представляет собой ответ.
Но кредит для @VonC.
Обратите внимание, что это должно работать как для 3.8, так и для 4.2.
Ответ 5
в настоящее время мои среды: jdk 1.7 (j2sdk 1.7 update 21) с eclipse 4.2 juno (SR2)
У меня была такая же проблема, поэтому я исправил ее, которые настроили аргументы VM Option -XX: -UseSplitVerifier '
но это вызвало большие проблемы, когда я буду развертывать продукт на основе Google-приложения-движка.
Наконец, я изменил java 6 (обновление 43)