ข้อผิดพลาดเซิร์ฟเวอร์ GAE 500

ฉันกำลังพัฒนาแอปบน GAE ฉันทดสอบเว็บไซต์ในเครื่องได้ดี แต่ทุกครั้งที่ฉันพยายามปรับใช้กับ GAE มันจะรายงานข้อผิดพลาด: ข้อผิดพลาดของเซิร์ฟเวอร์

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

ฉันค้นหามากใน Google ดูเหมือนว่าไม่มีคำตอบใดที่สามารถแก้ปัญหาของฉันได้ เมื่อฉันค้นหาบันทึกในแอป 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)

person i3wangyi    schedule 25.04.2014    source แหล่งที่มา


คำตอบ (8)


นี่คือเรื่องราว: Unsupported major.minor version 52.0 สิ่งนี้จะเกิดขึ้นเมื่อคุณคอมไพล์บน JDK เวอร์ชันที่สูงกว่า (52 = java8) จากนั้นรันบนเวอร์ชัน JRE ที่ต่ำกว่า (GAE ใช้ java7)

GAE ยังไม่รองรับ Java8 ดังนั้นคุณควรคอมไพล์ภายใต้ Java7

person Peter Knego    schedule 25.04.2014
comment
ฉันคอมไพล์ภายใต้ java 7 - person i3wangyi; 25.04.2014
comment
ตรวจสอบอีกครั้งดีกว่า version 52.0 หมายถึงโค้ดถูกคอมไพล์ภายใต้ Java8: (ดูออฟเซ็ต 6) en.wikipedia.org/wiki/Java_class_file #General_layout - person Peter Knego; 25.04.2014
comment
ฉันมีปัญหาเดียวกันและแม้แต่การตั้งค่าทั้งหมดก็ระบุ Java 7 การปรับใช้ GAE จะรวบรวมไฟล์ JSP โดยใช้ Java 8 หากมีอยู่ใน OSX ตรวจสอบไฟล์ที่สร้างขึ้นในไดเร็กทอรี tmp และคลาส Java ทั้งหมดถูกต้อง 51.0 แต่คลาส JSP คือ 52.0 มีความคิดเพิ่มเติมบ้างไหม? - person eeq; 27.05.2014
comment
มีปัญหาเดียวกันกับที่การตั้งค่าทั้งหมดถูกตั้งค่าเป็น Java 7 แต่ eclipse ใช้ Java 8 สำหรับไฟล์ JSP ทางออกเดียวที่ฉันพบว่าใช้งานได้คือการลบ Java 8 ออกจากระบบของฉัน - person JaapH; 09.06.2014
comment
ฉันมีปัญหาเดียวกันทุกประการและฉันไม่มี JDK8 ในเครื่องของฉันด้วยซ้ำ :) แต่ฉันแก้ไขได้หลังจากทำความสะอาดทุกอย่างก่อนที่จะ build+deploy เช่น mvn clean appengine:update - person the_marcelo_r; 24.12.2014
comment
ถูกต้องที่เวอร์ชันการคอมไพล์ผิด แต่น่าเสียดายที่การอัปเดตเอ็นจิ้นแอปจะคอมไพล์ JSP ด้วย Java 8 แม้ว่าการตั้งค่าคอมไพเลอร์ mvn จะถูกตั้งค่าเป็น Java 7 คุณจะต้องตั้งค่าตัวแปร JAVA_HOME เป็น java 7 ตามที่ระบุไว้ในคำตอบอื่น ๆ - person Scott Boring; 29.05.2015
comment
ฉันแก้ไขปัญหาการเปลี่ยนเป็น Java 1.7 ในคุณสมบัติ - › Project Facets - person kike; 27.07.2015
comment
ปัญหาเดียวกัน ฉันทำตามขั้นตอนทั้งหมดแล้ว: เปลี่ยน JAVA_HOME เป็น 7, maven คือ 3.3.9 และชี้ไปที่ Java 7 home ฉันมีปลั๊กอินใน maven ที่ระบุว่าจะสร้างด้วย Java 7 ฉันไม่มี JSP ใด ๆ เพียงแค่ HttpServlet ง่ายๆ ตัวเดียวที่พิมพ์สวัสดีชาวโลก ในโฟลเดอร์เป้าหมาย ฉันตรวจสอบเวอร์ชัน .class แล้วและมันบอกว่า 51.0 แต่ถึงกระนั้น เมื่อฉันปรับใช้จากบรรทัดคำสั่งด้วย mvn clean appengine:update (ไม่ใช่จาก Eclipse) ฉันมีข้อผิดพลาดเดียวกัน ผมทำอะไรผิดหรือเปล่า? - person Giuseppe Adaldo; 08.09.2016

ฉันมีปัญหาเดียวกันบน Windows เมื่อติดตั้ง Java 8

ฉันพยายามแก้ไขการตั้งค่าโปรเจ็กต์/พื้นที่ทำงาน แต่ไม่ได้ช่วยอะไร

ดังนั้นฉันจึงสร้างไฟล์แบตช์ต่อไปนี้เป็นวิธีแก้ปัญหาสำหรับโครงการ GAE:

eclipse_gae.bat:

SET JAVA_HOME="C:\Program Files\Java\jdk1.7.0_55"
SET PATH="%JAVA_HOME%\bin"
START eclipse.exe
person craigrs84    schedule 23.07.2014
comment
นี่ยอดเยี่ยมมากเพราะหมายความว่าคุณไม่จำเป็นต้องเปลี่ยน PATH อย่างถาวร! ขอบคุณ! - person tomgeraghty3; 26.11.2014
comment
เยี่ยมเลย ขอบคุณ! ใช้กับ maven และต้องตั้งค่าโฮม java โดยไม่มีเครื่องหมายคำพูด ทางลัดคือการใช้ Progra~1 หรือ Progra~2 (สำหรับ x86) เพื่อหลีกเลี่ยงปัญหาเรื่องการเว้นวรรคและวงเล็บตามที่ โพสต์บน superuser - person oliverdm; 19.12.2014

ไม่จำเป็นต้องลบ Java 8 ออกจาก MacOS โดยสมบูรณ์ เพียงกำหนดค่า 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

person icordoba    schedule 27.11.2014
comment
คุณควรอ้างอิงและให้ลิงก์สำหรับข้อมูลเพิ่มเติมเท่านั้น ตามปกติถ้าลิงก์เสียหรือล่ม โพสต์ของคุณก็จะไร้ประโยชน์ - person scenia; 18.06.2015

ตรวจสอบให้แน่ใจว่าเวอร์ชันของ Project Properties -> Project Facets -> Java ถูกตั้งค่าเป็น 1.7 และไม่ใช่ 1.8

นอกจากนี้ยังมีการอธิบายอย่างดีในส่วนเอกสารประกอบของปลั๊กอิน 'การเปลี่ยนระดับการปฏิบัติตาม JDK'

person Ridcully    schedule 24.10.2015
comment
วิธีแก้ปัญหาที่สั้นและแม่นยำ - person Prateek Joshi; 29.04.2016

ฉันพบปัญหาที่คล้ายกันตอนนี้ การตั้งค่าของฉันคือ OS X + JDKs 6, 7 และ 8 และใน eclipse.ini ฉันมี:

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

เห็นได้ชัดว่ามันจะใช้คอมไพเลอร์นั้นไม่ว่าคุณจะตั้งค่าอะไรในการตั้งค่าส่วนกลาง/โปรเจ็กต์ (ฉันลบ JDK 8 ออกจากรายการ JRE ที่ติดตั้งแล้วด้วยซ้ำ ไม่สำเร็จ)

เมื่อฉันเปลี่ยนให้ใช้ JDK 7 และปรับใช้แอป GAE ของฉันอีกครั้ง มันก็ใช้งานได้

person Miloš Ranđelović    schedule 26.06.2014

คุณต้องคอมไพล์ด้วย Java 1.7 แต่ถ้าคุณมีไฟล์ *.jsp คุณควรลบ Java 1.8 ออกจากระบบโดยสิ้นเชิง หากคุณใช้ Mac ที่นี่คือวิธีที่คุณสามารถทำได้

person Denis Kutlubaev    schedule 08.08.2014

หากคุณใช้ gradle (เช่น Android Studio) บน Mac คุณสามารถแก้ไขปัญหานี้ได้โดยเพิ่มบรรทัดต่อไปนี้ที่ด้านบนของสคริปต์ gradlew:

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

วิธีการต่างๆ เหล่านี้ควรใช้กับแพลตฟอร์มอื่นได้

person Tad    schedule 07.01.2015

ฉันแน่ใจว่าสิ่งนี้ได้รับการแก้ไขแล้ว แต่นี่คือวิธีแก้ปัญหา

GAE ทำงานบน java7 (ตามที่ระบุโดย Mr. Knego) ดังนั้น maven จะต้องคอมไพล์ด้วย 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

หากคุณใช้ตำแหน่งข้อมูล คุณควรอัปเดตไลบรารีตำแหน่งข้อมูลของคุณ

person PSchuette    schedule 06.07.2015