【问题标题】:GAE 500 server errorGAE 500 服务器错误
【发布时间】:2014-06-10 17:09:17
【问题描述】:

我正在 GAE 上开发应用程序,我在本地测试该网站很好但是,每次我尝试将它部署到它报告的 GAE 时 错误:服务器错误

The server encountered an error and could not complete your request.
Please try again in 30 seconds. 

我在谷歌搜索了很多,似乎没有答案可以解决我的问题。当我在 GAE 应用程序中查找日志时,以下是我目前发现的主要问题。一开始我以为是JDK8的问题,但是设置JDK8后,我什至无法在本地运行应用程序!

    Uncaught exception from servlet
java.lang.UnsupportedClassVersionError: org/apache/jsp/index_jsp : Unsupported major.minor version 52.0
    at com.google.appengine.runtime.Request.process-aea5c804a9f29902(Request.java)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:795)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:360)
    at org.mortbay.util.Loader.loadClass(Loader.java:91)
    at org.mortbay.util.Loader.loadClass(Loader.java:71)
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
    at java.lang.Thread.run(Thread.java:724)

【问题讨论】:

    标签: google-app-engine google-cloud-datastore gae-eclipse-plugin


    【解决方案1】:

    这就是证据:Unsupported major.minor version 52.0。当您在较高版本的 JDK (52 = java8) 上编译然后在较低的 JRE 版本上执行它时会发生这种情况(GAE 使用 java7)。

    GAE还不支持Java8,所以需要在Java7下编译。

    【讨论】:

    • 我确实在java 7下编译过。
    • 更好的仔细检查。 version 52.0 表示代码是在 Java8 下编译的:(见偏移 6)en.wikipedia.org/wiki/Java_class_file#General_layout
    • 我有同样的问题,甚至所有设置都指示 Java 7,GAE 部署以某种方式使用 Java 8 编译 JSP 文件(如果存在于 OSX 中)。还检查了 tmp 目录中生成的文件,所有 Java 类都是正确的 51.0,但 JSP 类是 52.0。还有什么想法吗?
    • 遇到了完全相同的问题,所有设置都设置为 Java 7,但 Eclipse 使用 Java 8 作为 JSP 文件。我发现唯一可行的解​​决方案是从我的系统中删除 Java 8
    • 我遇到了完全相同的问题,我的机器上什至没有 JDK8 :) 但我在构建+部署之前清理了所有内容后解决了它,例如,“mvn clean appengine:update”
    【解决方案2】:

    在安装 Java 8 时,我在 Windows 上遇到了同样的问题。

    我尝试修改项目/工作区设置,但没有帮助。

    因此,我创建了以下批处理文件作为 GAE 项目的解决方法:

    eclipse_gae.bat:

    SET JAVA_HOME="C:\Program Files\Java\jdk1.7.0_55"
    SET PATH="%JAVA_HOME%\bin"
    START eclipse.exe
    

    【讨论】:

    • 这太棒了,因为这意味着您不必永久更改 PATH!谢谢!
    • 太好了,谢谢!将它与 maven 一起使用,并且必须将 java home 设置为不带引号。一个捷径是使用 Progra~1 或 Progra~2(对于 x86)来避免posted on superuser 的空格和括号问题。
    【解决方案3】:

    无需从 MacOS 中完全删除 Java 8。只需按照此处所示重新配置 Eclipse 以强制它将 JSP 编译为 Java 7: http://java.wildstartech.com/Java-Platform-Standard-Edition/mac-os-x-java-development/how-to-configure-eclipse-to-run-with-java-7-when-java-8-is-installed

    【讨论】:

    • 您应该引用并仅提供链接以获取更多信息。实际上,如果链接断开或断开,您的帖子将变得毫无用处。
    【解决方案4】:

    确保 Project Properties -> Project Facets -> Java 的版本设置为 1.7 而不是 1.8。

    插件的文档部分“Changing the JDK Compliance Level”也很好地解释了这一点

    【讨论】:

    • 简短而精确的解决方案。
    【解决方案5】:

    我现在遇到了类似的问题。我的设置是 OS X + JDKs 6、7 和 8,在我的 eclipse.ini 中我有:

    -vm /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/bin/java

    显然,无论您在全局/项目首选项中设置什么,它都会使用该编译器(我什至从已安装的 JRE 列表中删除了 JDK 8,但没有成功)。

    一旦我将其更改为使用 JDK 7 并重新部署了我的 GAE 应用程序,它就可以工作了。

    【讨论】:

      【解决方案6】:

      您必须使用 Java 1.7 进行编译。但是如果您有 *.jsp 文件,您还应该从系统中完全删除 Java 1.8。如果你使用 Mac,here 是你可以做到的。

      【讨论】:

        【解决方案7】:

        如果您在 Mac 上使用 gradle(例如 Android Studio),您可以通过在 gradlew 脚本顶部添加以下行来解决此问题:

        # Insist on java 7 JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

        此方法的变体应该适用于其他平台。

        【讨论】:

          【解决方案8】:

          我确定这已经解决了,但这里是解决方案

          GAE 在 java7 上运行(正如 Knego 先生所指出的),因此 maven 必须使用 java7 进行编译。执行以下操作:

          我更喜欢在终端中完成所有这些操作

          编辑 bash 配置文件:

          touch ~/.bash_profile; open ~/.bash_profile
          

          设置 Java 主目录

          #set JAVA_HOME
          JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
          export JAVA_HOME
          
          # For Apache Maven Commands
          export M2_HOME=/Users/your-username/your/path/to/maven/apache-maven-3.3.3
          export PATH=$PATH:$M2_HOME/bin
          

          导航到您的项目文件夹(使用 pom.xml)并重新安装干净版本的 maven

          mvn clean install
          

          导航到 EAR 或 WAR 目录并使用新的运行时进行部署

          mvn appengine:update
          

          如果您使用端点,则应更新端点库

          【讨论】:

            猜你喜欢
            • 2014-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-30
            • 1970-01-01
            • 2016-06-19
            相关资源
            最近更新 更多