Maven 了解如何解决“问题”;不一致的堆栈映射帧“;例外

Maven 了解如何解决“问题”;不一致的堆栈映射帧“;例外,maven,java-7,verification,.class-file,verifyerror,Maven,Java 7,Verification,.class File,Verifyerror,我在web应用程序启动时遇到了一个异常,因为guice正在尝试构造上面提到的类 java.lang.VerifyError: Inconsistent stackmap frames at branch target 2770 in method com.aptusi.apps.magazine.api.servlet.internal.EditorServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http

我在web应用程序启动时遇到了一个异常,因为guice正在尝试构造上面提到的类

java.lang.VerifyError: Inconsistent stackmap frames at branch target 2770 in method com.aptusi.apps.magazine.api.servlet.internal.EditorServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;Lcom/aptusi/persistence/runtime/framework/DboSession;)V at offset 200
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2483)
at java.lang.Class.getDeclaredConstructors(Class.java:1891)
at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:243)
at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:96)
at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:629)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:845)
at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:772)
at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:256)
at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205)
at com.google.inject.internal.InjectorImpl.getBinding(InjectorImpl.java:146)
at com.google.inject.internal.InjectorImpl.getBinding(InjectorImpl.java:66)
at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:103)
at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82)
at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102)
at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)`
我知道-XX:-UseSplitVerifier和-noverifyJVM选项,但我不想使用,因为我想确保这个项目中的所有代码至少是java版本7

为了做到这一点,了解这一点在我的代码中的确切位置是很有用的,我不清楚提到的200的偏移量是多少,但它能与行号相关吗


还有谁知道我可以找到我的类路径上所有类的java版本的方法吗?我使用maven,因此有很多依赖项,所以我正在寻找一种自动方法来查找类路径上可能编译为低于1.7的java版本的任何类?

查找类文件的版本,只需查看类文件的第8个字节。对于Java7类,它将是51。像ASM这样的框架可以为您做到这一点


就错误而言,这意味着类文件的格式不正确。您是如何创建这些类的?你做过字节码操作吗?如果是这样的话,您的代码中可能有一个bug。

谢谢Abumb,问题是这个项目依赖大约100个JAR,所以我需要一种方法来快速验证所有JAR中的所有类是否符合某个版本。只需编写一个Python脚本(假设您知道JAR的位置)。这似乎是验证这一点的唯一方法,尽管我很惊讶没有用于此allready的工具。您知道偏移量与类文件中的行号之间的关系吗?@sbumb,失败的总是同一个静态方法。但它是随机失败的。有时我重建一个依赖项,然后它就消失了,有时它在开发服务器和gae的生产服务器上都不存在。我不明白GAE sdk在运行时做什么,它可以做一些字节码修改。我发现了一份2012年的bug报告,报告显示Eclipse编译器发生了错误,所以我不知道。一些奇怪的互动