java.lang.VerifyError:在分支目标 73 处期望堆栈图帧

Posted

技术标签:

【中文标题】java.lang.VerifyError:在分支目标 73 处期望堆栈图帧【英文标题】:java.lang.VerifyError: Expecting a stackmap frame at branch target 73 【发布时间】:2014-09-19 04:51:20 【问题描述】:

我使用jdk 1.7,jekins,maven,当我构建项目时,单元测试失败,错误是:

异常详细信息: 位置: com/DataDictDao.save(Lcom/DataDict;)Ljava/lang/Long; @25:最不发达国家原因: 此位置的预期堆栈图帧。字节码: 0000000: 033d 11ff ff3e 1212 1100 25b8 0018 2ab4 0000010: 0022 122d b900 3302 0012 1211 0027 b800 0000020:182a b400 352b b900 3a02 0012 1211 0028 0000030: b800 182a b400 2212 3cb9 0033 0200 1212 0000040:1100 2cb8 0018 a700 2d12 1211 0029 b800 0000050: 183a 0412 1211 002a b800 182a b400 2212 0000060: 3e19 04b9 0042 0300 1212 1100 2bb8 0018 0000070: 1904 bf12 1211 002d b800 182b b600 48b8 0000080: 004e b0 异常处理表: bci [25, 62] => 处理程序:73 堆栈映射表: same_locals_1_stack_item_extended(@81,Object[#43]) 同帧(@123)

在 java.lang.Class.getDeclaredConstructors0(Native Method) 在 java.lang.Class.privateGetDeclaredConstructors(Class.java:2493) 在 java.lang.Class.getDeclaredConstructors(Class.java:1901) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:231) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1002) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:975) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 在 org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:120) 在 org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 在 org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) 在 org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 在 org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 在 org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:105) 在 org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:74) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 在 org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 在 org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 在 org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

我在 maven MAVEN_OPTS 中尝试了 -noverify 和 -XX:-UseSplitVerifier,都没有成功,谁能告诉我为什么会出现这个错误,如何解决?

【问题讨论】:

您是在问“为什么会出现此错误?” (在这种情况下,我们需要了解更多信息 - 您是否使用任何 Java 代理、AspectJ 等)或者您是否在问“我知道为什么会收到此错误,但为什么我不能抑制它/为什么不能我禁用了验证器?” How do I get unit test to run in java 7: java.lang.VerifyError: Expecting a stackmap frame at branch target 的可能重复项 谢谢你,我已经改变了我的问题,我也添加了 -XX:-UseSplitVerifier ,但它不起作用 com.DataDictDao 类在哪里定义? java.lang.VerifyError: Expecting a stackmap frame的可能重复 【参考方案1】:

我有同样的问题。解决方案是将-XX:-UseSplitVerifier 添加到surefire 插件配置中:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine> -XX:-UseSplitVerifier</argLine>
    </configuration>
</plugin>

(省略了我的插件配置的无关细节。)

我正在使用 JDK 1.7 和 maven 3.2.3。

对于 JDK 1.8,使用:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine> -noverify </argLine>
    </configuration>
</plugin>

【讨论】:

在哪里添加这个插件配置?谢谢。 @Sarin 在 下的 maven pom.xml 文件中。也可以参考maven.apache.org/guides/mini/guide-configuring-plugins.html【参考方案2】:

如果您使用的是 java 1.8,请执行以下操作 1. Windows -> 首选项 -> 已安装的 JRE。 2.选择jdk/jre,选择编辑。 3. 在默认 VM 参数中,给出“-noverify”。

【讨论】:

以上是关于java.lang.VerifyError:在分支目标 73 处期望堆栈图帧的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.VerifyError

API < 21 的 java.lang.VerifyError

java.lang.verifyError 在休眠特定用户类型上

java.lang.VerifyError:期望堆栈图帧

Proguard - 找不到常见的超类/java.lang.VerifyError

Evernote Android SDK 库在 R8 下抛出 java.lang.VerifyError