Как получить модульный тест для запуска в Java 7: java.lang.VerifyError: Ожидание кадра стековой карты в целевой ветви - PullRequest
12 голосов
/ 26 декабря 2011

Привет! Я запускаю тест maven, используя maven 3.0.3 с hibernate 4.0.0, финальную версию и версию 3.1 на jdk7, обновление 2.

Я получаю следующую ошибку.

Caused by: java.lang.VerifyError: Expecting a stackmap frame at branch target 63 in method ${myDomainClass}.equals(Ljava/lang/Object;)Z at offset 24
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
    at java.lang.Class.getDeclaredMethods(Class.java:1808)
    at org.hibernate.property.BasicPropertyAccessor.getterMethod(BasicPropertyAccessor.java:352)
    at org.hibernate.property.BasicPropertyAccessor.getGetterOrNull(BasicPropertyAccessor.java:331)
    at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:314)
    at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:310)
    at org.hibernate.internal.util.ReflectHelper.getter(ReflectHelper.java:250)
    at org.hibernate.internal.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:229)
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:314)
    at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:447)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:380)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:320)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:171)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3377)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3369)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3357)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:184)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:314)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)

Мой метод Equals использует EqualsBuilder из commons-lang 2.6. Я установил следующие параметры maven

SET MAVEN_OPTS=%MAVEN_OPTS% -XX:-UseSplitVerifier

после прочтения Java 7 JVM verifyError

Примечание: мой тест работает под jdk 1.6 с обновлением 29.

Как мне это исправить? Кажется, установка -XX: -UseSplitVerifier все еще вызывает ошибку.

Ответы [ 2 ]

14 голосов
/ 06 февраля 2012

В соответствии с верной документацией плагина MAVEN_OPTS не наследуются порожденной JVM, поэтому вам нужно указать argLine параметр конфигурации с -XX: -UseSplitVerifier в конфигурации maven-surefire-plugin элемент.

0 голосов
/ 06 февраля 2012

Вы, кажется, бежите из-за "улучшенного" верификатора байт-кода (который на самом деле не работает, так что требует от компилятора гораздо большей информации о верификаторе). Вам нужно либо обработать ваш код с помощью строки компилятора, которая производит «улучшенный» формат байт-кода, либо установить версию файла класса, установленную на «старую» версию (которая, я думаю, будет меньше 50.0).

...