14

私は GAE でアプリを開発していますが、Web サイトをローカルで正常にテストしていますが、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)
4

8 に答える 8

17

これは証拠です: Unsupported major.minor version 52.0. これは、より高いバージョンの JDK (52 = java8) でコンパイルし、それをより低い JRE バージョン (GAE は java7 を使用) で実行した場合に発生します。

GAE はまだ Java8 をサポートしていないため、Java7 でコンパイルする必要があります。

于 2014-04-25T06:21:05.677 に答える
5

MacOS から Java 8 を完全に削除する必要はありません。JSP を Java 7 として強制的にコンパイルするには、ここに示すように Eclipse を再構成するだけです 。 eclipse-to-run-with-java-7-when-java-8-is-installed

于 2014-11-27T08:21:28.967 に答える
4

Project Properties -> Project Facets -> Java のバージョンが 1.8 ではなく 1.7 に設定されていることを確認してください。

これは、プラグインのドキュメント セクション「JDK コンプライアンス レベルの変更」でも適切に説明されています。

于 2015-10-24T13:20:42.423 に答える
2

Java 1.7 でコンパイルする必要があります。ただし、*.jsp ファイルがある場合は、Java 1.8 もシステムから完全に削除する必要があります。Mac を使用している場合、次の方法で行うことができます。

于 2014-08-08T17:32:01.960 に答える
2

Mac で gradle (Android Studio など) を使用している場合は、gradlew スクリプトの先頭に次の行を追加することで、この問題を回避できます。

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

この方法のバリエーションは、他のプラットフォームでも機能するはずです。

于 2015-01-07T15:34:44.273 に答える
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

エンドポイントを使用している場合は、エンドポイント ライブラリを更新する必要があります

于 2015-07-06T12:38:45.737 に答える