我在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)
答案 0 :(得分:17)
这是告诫:Unsupported major.minor version 52.0
。当您在更高版本的JDK(52 = java8)上编译然后在较低的JRE版本(GAE使用java7)上执行它时会发生这种情况。
GAE尚不支持Java8,因此您应该在Java7下进行编译。
答案 1 :(得分:8)
安装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
答案 2 :(得分:5)
无需从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
答案 3 :(得分:4)
确保Project Properties的版本 - &gt;项目方面 - &gt; Java设置为1.7而不是1.8。
插件的文档部分也很好地解释了这一点&#39; Changing the JDK Compliance Level&#39;
答案 4 :(得分:3)
我现在遇到了类似的问题。我的设置是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应用程序,它就有效。
答案 5 :(得分:2)
您必须使用Java 1.7进行编译。但是如果你有* .jsp文件,你也应该从系统中完全删除Java 1.8。如果你使用Mac,here就是你可以做到的。
答案 6 :(得分:2)
如果您在Mac上使用gradle(例如Android Studio),则可以通过在gradlew脚本的顶部添加以下行来解决此问题:
# Insist on java 7
JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
此方法的变体应适用于其他平台。
答案 7 :(得分:0)
我确定这已经解决,但这是解决方案
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
如果您使用的是端点,则应更新端点库