14

我在GAE上開發的應用程序,我測試的網站在本地但細,每次我試圖把它部署到它與 錯誤報告的GAE時間:服務器錯誤GAE 500服務器錯誤

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) 

回答

17

這是告示:Unsupported major.minor version 52.0。在較高版本的JDK(52 = java8)上編譯並在較低版本的JRE(GAE使用java7)上執行時會發生這種情況。

GAE還不支持Java8,因此您應該在Java7下進行編譯。

+1

解釋我沒有在Java 7中 – i3wangyi

+0

更好仔細檢查編譯。 '版本52.0'意味着代碼在Java8下編譯:(見偏移量6)http://en.wikipedia.org/wiki/Java_class_file#General_layout –

+3

我有同樣的問題,甚至所有設置都表明Java 7,GAE部署以某種方式如果存在於OSX中,則使用Java 8編譯JSP文件。還檢查了tmp目錄中生成的文件,所有Java類都是正確的51.0,但JSP類是52.0。還有什麼想法? – eeq

3

現在我遇到了類似的問題。我的設置是OS X +的JDK 6,7和8,在我的eclipse.ini我:

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

顯然,它會使用該編譯器,不管你在全球/項目喜好進行設置(我甚至從已安裝的JRE列表中刪除了JDK 8,但沒有成功)。

一旦我將其更改爲使用JDK 7並重新部署了我的GAE應用程序,它就起作用了。

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 
+0

這太棒了,因爲這意味着您不必永久更改PATH!謝謝! – tomgeraghty3

+0

太好了,謝謝!與maven一起使用它,並且必須將java的home設置爲不帶引號。一個快捷方式是使用Progra〜1或Progra〜2(用於x86)來避免[以超級用戶身份](http://superuser.com/a/606124)上的空格和括號出現問題。 – oliverdm

+0

不錯的解決方法!謝謝 – Smii

2

您對Java 1.7編譯。但是,如果您有* .jsp文件,則還應該從系統中完全刪除Java 1.8。如果你使用Mac,here是你如何做到的。

2

如果您在mac上使用gradle(例如Android Studio),則可以通過將以下行添加到頂部您gradlew腳本:

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

這種方法的變化應該在其他平臺上工作。

0

我敢肯定,這已經解決了,但這裏是

GAE上java7運行(由Knego先生所示),因此行家必須java7被編譯的解決方案。執行以下操作:

我喜歡做這一切在終端

編輯慶典簡介:

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 

如果您正在使用的端點,您應該更新您的端點庫

4

確認,該項目屬性的版本 - >項目方面 - > Java被設置爲1.7而不是1.8。

這也很好地在插件的文檔部分「Changing the JDK Compliance Level

+0

簡短而精確的解決方案。 –