#java #eclipse #google-app-engine
# #java #eclipse #google-app-engine
Вопрос:
Я выполнил поиск и нашел быструю подсказку: VerifyError с помощью jdk 7:
Если вы столкнулись со следующей ошибкой
java.lang.VerifyError: Expecting a stackmap frame at branch target 6 bla bla bla …
тогда простым решением является добавление следующего аргумента JVM по умолчанию
-XX:-UseSplitVerifier
Если вы делаете это в eclipse, как и я, тогда перейдите в окно -> Настройки -> Установленные JREs -> и добавьте параметр по умолчанию.
Что делает этот параметр? Oracle просто упоминает, что это новая проверка типов с атрибутами StackMapTable. Ха! Наслаждайтесь! Теперь это Oracle.
Однако, когда я перехожу к установленным настройкам JREs, он говорит An error has occurred when creating this preference page
Я начал изучать Google App Engine и начал с CodeLabEx0 от Google, и я думаю, что это сработало нормально, потому что я видел в своем браузере то, что должен был видеть. Но когда я перешел ко второй главе CodeLabEx1, появляется ошибка, которая не позволяет мне создавать какие-либо продукты или элементы через интерфейс браузера. Затем я посмотрел на консоль eclipse и увидел это:
Oct 28, 2011 11:40:30 PM com.google.apphosting.utils.jetty.JettyLogger info
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
Oct 28, 2011 11:40:31 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed C:Usersrock84DownloadsCodeLabEx1CodeLabEx1warWEB-INF/appengine-web.xml
Oct 28, 2011 11:40:31 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed C:Usersrock84DownloadsCodeLabEx1CodeLabEx1warWEB-INF/web.xml
Oct 28, 2011 4:40:31 PM com.google.appengine.tools.development.DevAppServerImpl start
INFO: The server is running at http://localhost:8888/
Oct 28, 2011 11:40:59 PM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: Error for /product
java.lang.VerifyError: Expecting a stackmap frame at branch target 48 in method com.google.appengine.codelab.ProductServlet.doPut(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V at offset 38
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Я понятия не имею, что это может быть. Это новая установка Eclipse 3.7 со следующим установленным программным обеспечением:
- Eclipse IDE для разработчиков Java
- Google App Engine Java SDK 1.5.5
- Плагин Gooogle для Eclipse 3.7
- Google Web Toolkit SDK 2.4.0
Я использую 64-разрядную версию Windows 7 с версией Java 1.7.0
Ответ №1:
Хорошо, я нашел решение. Это то, что я написал в самом верху. Оказывается, я добавлял аргумент к неправильной установке eclipse. Теперь это работает.
«Если вы столкнулись со следующей ошибкой java.lang.VerifyError: ожидание фрейма stackmap в целевой ветке 6 bla bla bla …. тогда простое решение — добавить следующий аргумент JVM по умолчанию -XX: -UseSplitVerifier Если вы делаете это в eclipse, как и я, затем перейдите в Window -> Preferences -> Installed JREs -> и добавьтепараметр по умолчанию. Что делает этот параметр? Oracle просто упоминает, что это новая проверка типов с атрибутами StackMapTable. Ха! Наслаждайтесь! Теперь это Oracle. » Благодаря этому чуваку: http://vikashazrati.wordpress.com/2011/10/09/quicktip-verifyerror-with-jdk-7 /
Ответ №2:
Это также возможно, изменив конфигурацию запуска: Выполнить> Выполнить конфигурации
Выберите проект вашего веб-приложения слева, откройте вкладку Аргументы и добавьте аргумент -XX:-UseSplitVerifier к аргументам виртуальной машины.
Преимущества этого подхода также являются его недостатком: он применяется только к этому проекту, а не ко всей установке виртуальной машины.
Ответ №3:
У меня была аналогичная проблема при развертывании моего приложения GWT в GAE, и я использовал JDK 7. Переключение проекта на JDK 6 решило эту проблему (я забыл, что в настоящее время GAE поддерживает только JDK 5 и 6).
Комментарии:
1. Кроме того, смотрите Документацию Google для поддерживаемой версии Java.