14

I App auf GAE bin zu entwickeln, zu testen ich die Website lokal feinen es jedoch auf die GAE jedes Mal, wenn ich versuchte, es mit Fehler meldet bereitstellen: Server-FehlerGAE 500 Serverfehler

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

ich gesucht viel in Google, scheint keine Antwort meine Frage zu lösen. Wenn ich nach dem Log in der GAE-App suche, folgt das Hauptproblem, das ich bisher gefunden habe. Anfangs dachte ich, dass es an JDK8 liegt, aber wenn ich JDK8 einstelle, kann ich die App nicht einmal lokal ausführen!

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) 

Antwort

17

Dies ist die verräterische: Unsupported major.minor version 52.0. Dies geschieht, wenn Sie auf einer höheren Version JDK kompilieren (52 = java8) und dann auf einer niedrigeren JRE-Version ausführen (GAE verwendet java7).

GAE unterstützt Java8 noch nicht, daher sollten Sie unter Java7 kompilieren.

+1

ich unter Java 7. – i3wangyi

+0

besser überprüfen kompilieren haben schön erklärt. 'Version 52.0' bedeutet Code wurde unter Java8 kompiliert: (siehe Offset 6) http://en.wikipedia.org/wiki/Java_class_file#General_layout –

+3

Ich habe das gleiche Problem, und sogar alle Einstellungen zeigen Java 7, die GAE-Bereitstellung irgendwie kompiliert die JSP-Dateien unter Verwendung von Java 8, wenn es in OSX vorhanden ist. Außerdem wurden die generierten Dateien im tmp-Verzeichnis überprüft und alle Java-Klassen sind korrekt 51.0, JSP-Klassen sind jedoch 52.0. Irgendwelche weiteren Ideen? – eeq

3

Ich stieß jetzt auf ein ähnliches Problem. Mein Setup ist O X + JDKs 6, 7 und 8, und in meinem eclipse.ini ich hatte:

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

Anscheinend wird es, dass die Compiler verwenden, egal was Sie in global/Projekteinstellungen festlegen (I sogar JDK 8 aus der Liste Installierte JRE entfernt, kein Erfolg).

Sobald ich das geändert habe, um JDK 7 zu verwenden und meine GAE-Anwendung neu zu implementieren, funktionierte es.

8

Ich hatte das gleiche Problem unter Windows, wenn Java 8 installiert wurde.

Ich habe versucht, die Projekt/Arbeitsbereich-Einstellungen zu ändern, aber es hat mir nicht geholfen.

Also, habe ich die folgende Batch-Datei als Behelfslösung für GAE Projekte:

eclipse_gae.bat:

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

das ist genial, weil es bedeutet, dass Sie den PATH nicht dauerhaft ändern müssen! Vielen Dank! – tomgeraghty3

+0

Großartig, danke! Benutzte es mit Maven und musste das Java ohne Anführungszeichen nach Hause setzen. Eine Verknüpfung besteht darin, Progra ~ 1 oder Progra ~ 2 (für x86) zu verwenden, um Probleme mit Leerzeichen und Klammern als [posted on superuser] (http://superuser.com/a/606124) zu vermeiden. – oliverdm

+0

Schöne Workaround! Danke – Smii

2

Sie haben mit Java 1.7 zu kompilieren. Wenn Sie jedoch * .jsp-Dateien haben, sollten Sie auch Java 1.8 vollständig aus dem System entfernen. Wenn Sie Mac verwenden, ist here, wie Sie es tun können.

5

Es ist nicht notwendig, Java 8 vollständig von MacOS zu entfernen. Nur Eclipse-rekonfigurieren, wie hier gezeigt, dass es zu zwingen, JSPs als Java zu kompilieren 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

+1

Dies ist die Antwort, die funktioniert. –

+0

Sie sollten angeben und nur den Link für weitere Informationen bereitstellen. Wenn die Verbindung unterbrochen oder unterbrochen wird, wird Ihr Beitrag nutzlos. – scenia

2

Wenn Sie gradle (zB Android Studio) auf einem Mac verwenden, können Sie indem Sie die folgenden Zeilen an den Anfang, um dieses Problem zu umgehen Ihre gradlew Skript:

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

Variationen dieses Verfahrens sollten auf anderen Plattformen arbeiten.

0

Ich bin sicher, dass dieses Problem gelöst worden, aber hier ist die Lösung

GAE auf Java7 läuft (wie von Herrn Knego angegeben) so Maven mit Java7 kompilieren müssen.Gehen Sie wie folgt vor:

Ich ziehe alles im Terminal

bearbeiten bash Profil zu tun:

touch ~/.bash_profile; open ~/.bash_profile 

Set Java-Basisverzeichnis

#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 

Navigieren Sie zu Ihrem Projektordner (mit pom.xml) und installieren Sie eine saubere Version von maven

mvn clean install 

Navigieren Sie zu EAR- oder WAR-Verzeichnis und bereitstellen mit einer neuen Laufzeit

mvn appengine:update 

Wenn Sie Endpunkte verwenden, sollten Sie Ihren Endpunkt Bibliotheken aktualisieren

4

Vergewissern Sie sich, dass die Version von Projekteigenschaften -> Projekt Facetten -> Java wird auf 1.7 und nicht auf 1.8 gesetzt.

Dies spiegelt sich auch in den Plugin-Dokumentation Abschnitt ‚Changing the JDK Compliance Level

+0

kurze und präzise Lösung. –

Verwandte Themen