Cuando compilo y ejecuto mi proyecto en Eclipse con JDK7 o JDK6 todo está bien. Sin embargo, después construyo utilizando ANT y luego trató de ejecutarlo utilizando el sistema JDK7, me sale el error:Java 7 - Marcos de mapa de pila inconsistentes - Necesito ayuda para entender por qué la solución funciona
marcos inconsistentes stackmap en objeto de bifurcación 25 en myClass.myMethod método() [[Ljava/lang/Object; en el offset 14
He buscado por todas partes y se encontró un par de buenas preguntas aquí en StackOverflow:
- Java 7 JVM VerifyError in Eclipse
- Akka Actors fails, VerifyError: Inconsistent stackmap frames at branch target
Tanto básicamente sugieren añadir -XX:-UseSplitVerifier
como Opción JVM que solucionó el problema. Todavía no entiendo completamente por qué, pero al parecer this bug report se supone que debe ayudar. Desafortunadamente todavía no lo entiendo ...
Me di cuenta en una de las preguntas que alguien estaba usando la programación orientada a Aspect, que me hizo pensar que estoy usando Guice (marco DI de Google) que podría causar el problema pero no puedo ver cómo. Se supone que es compatible con JDK7.
También estoy usando Proguard pero también se supone que debe funcionar con JDK7.
De todas formas, en este momento no tengo idea de por qué funciona esta solución aparte de básicamente retroceder a la versión anterior de JDK (en este caso, JDK6) cuando alguna parte del código intenta jugar con el código de bytes (que es por eso que creo que está relacionado con el código DI). Pero todavía no soy capaz de establecer el enlace adecuado. ¡Y también podría estar muy lejos!
Si alguien pudiera explicarme lo que sucede o por qué sucede esto, le agradecería enormemente. También realmente odio tener que usar una solución ya que esto no es lo que considero una solución a largo plazo.
* "Se supone que es compatible con JDK7." * - tal vez su soporte tenga errores. ¿Ha buscado en el rastreador/grupos/listas de Guice? –
No he podido encontrar nada en términos de errores en su rastreador de problemas –
Supongo que en java7 agregaron un código de bytes más agresivo verificando cheques y lo que sea que guice esté haciendo con el código de bytes para hacer su inyección de dependencia no no trabaje con esos controles –