2013-10-01 8 views
5

Я получаю исключение при запуске веб-приложения, так как 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 и -noverify варианты Jvm, но я не хочу использовать, как я хочу, чтобы убедиться, что весь код в этом проекте, по крайней мере Java версии 7.

Чтобы сделать это Было бы полезно понять, где именно это происходит в моем коде, его непонятно, что такое смещение 200, но может ли оно быть связано с номером строки?

Также кто-нибудь знает, как я могу узнать версии Java всех классов в моем пути к классам, я использую maven, поэтому есть много зависимостей, поэтому я ищу автоматический способ поиска любых классы по пути к классам, которые могут быть скомпилированы в более низкую версию java, чем 1.7?

ответ

1

Чтобы найти версию класса, просто просмотрите 8-й байт файла класса. Это будет 51 для классов Java 7. Такая структура, как ASM, сделает это за вас.

Что касается ошибки, это значит, что ваш классный файл неверен. Как вы создали эти классы? Вы делали какие-либо манипуляции с байт-кодами? Если это так, у вас, вероятно, есть ошибка в коде.

+0

Спасибо, Antimony, проблема в том, что этот проект зависит от примерно 100 банок, поэтому мне нужно быстро проверить, что все классы внутри всех банок соответствуют определенной версии. – PiersyP

+0

Просто напишите сценарий Python (предполагая, что вы знаете, где расположены банки). – Antimony

+0

Кажется, что это единственный способ проверить это, хотя я удивлен, что для этого уже не существует инструмента. – PiersyP

 Смежные вопросы

  • Нет связанных вопросов^_^