Подтвердить что ты не робот

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.

4b9b3361

Ответ 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)