Java 7 JVM VerifyError в Eclipse - PullRequest
       30

Java 7 JVM VerifyError в Eclipse

33 голосов
/ 01 ноября 2011

Когда я компилирую свой проект в eclipse indigo, используя JDK 7, я получаю следующий диалог ошибки

enter image description here

со следующей трассировкой стека

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)

IМы нашли соответствующую ошибку здесь и использовали предложенный обходной путь использования опции jvm -XX:-UseSplitVerifier, и хотя она работает, эта ошибка все еще смущает меня.

Кто-нибудь знает, почему это происходит, ипочему обходной путь ... работает?

- Примечание -

Проект прекрасно компилируется с использованием JDK 6.

Ответы [ 5 ]

27 голосов
/ 01 ноября 2011

Ошибка 353467 говорит о «использовании -XX:-UseSplitVerifier для активации старого верификатора».
Это согласуется с Руководством по внедрению *1005* JDK TM 6, которое описывает этот параметр как:

Традиционный верификатор можно принудительно установить с флагом -XX:-UseSplitVerifier.

Отсутствующие или неправильные атрибуты StackMapTable для файлов классов версии 50.0 могут привести к VerifyError исключениям.
Инструменты, которые перезаписывают байт-код в файлах классов версии 50.0 и неправильно обновляют StackMapTable, могут не проверять и вызывать исключения.

Итак, комментарий от 2011-10-03 указывает на то, что:

AspectJ теперь автоматически активирует ранее необязательный параметр для создания стековых карт, если классы являются Java7.

1 голос
/ 15 мая 2012

Когда у меня возникла эта проблема, я исправил ее, удалив системные библиотеки JDK 1.7 из проекта, и вместо этого добавил библиотеки 1.6 JDK. Я снова запустил проект и не получил ошибку. Когда я снова добавил библиотеки JDK 1.7, он все еще работает, поэтому что-то в «замене» заставляет его работать.

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

в настоящее время моя среда - jdk 1.7 (j2sdk 1.7, обновление 21) с eclipse 4.2 juno (SR2) У меня была такая же проблема, поэтому я исправил ее, настроив аргументы виртуальной машины. Option '-XX: -UseSplitVerifier' но возникла большая проблема, когда я разверну продукт на основе google-app-engine.

наконец-то я сменил java 6 (обновление 43)

0 голосов
/ 23 октября 2012

Я столкнулся с этой проблемой в Juno, но решил ее, установив последнюю версию 4.2 с сайта обновления 4.2 здесь:

http://www.eclipse.org/ajdt/downloads/

Это то же самое, что @VonC дал год назад - но поскольку обновленный AspectJ уже есть (но не в последнем репозитории Juno и не в том, что поставляется со Spring), он теперь представляет собой ответ.

Но кредит @ VonC.

Обратите внимание, что это должно работать как для 3.8, так и для 4.2.

0 голосов
/ 03 ноября 2011

mre, вы можете поделиться своим исходным кодом (или извлеченным примером), который показывает эту ошибку при запуске? Я считаю, что это ошибка в Java-компиляторе eclipse и должна быть исправлена.

Пожалуйста, откройте ошибку и в eclipse bugzilla, если вы можете предоставить пример кода.

...