最近まで、私のコードは GAE と開発サーバーで正常に動作していました。その後、最近、新しいバージョンをアップロードしましたが、サーバーではまったく機能せず、ローカル マシン (開発サーバー) では問題なく機能します。古いバージョンは引き続きサーバー上で動作します。
新しいバージョンの URL にアクセスするたびに、次のストラックトレースがログに記録されます。
Uncaught exception from servlet
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:287)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:389)
at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
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.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:206)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:179)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:136)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:468)
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:256)
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 com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
at java.lang.Thread.run(Thread.java:745)
これは、私が見つけることができる最も関連性の高い依存関係です (プロジェクトで使用しているユーティリティ ライブラリにあります)。
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
確かに、その中のクラスにはメソッドjavax.ws.rs.core.Application
が含まれていません。getProperties()
問題は、このコードが開発サーバーでなぜ/どのように機能するのかということです。
このライブラリや、コードの全体的なレイアウトや動作に影響を与える最近の変更は行っていません (既存のコードにいくつかの機能を追加しただけです)。この問題の原因は何ですか?
GAE Java SDK のバージョン 1.9.32 を使用していて、最近 1.9.34 にアップグレードしました -- その後、問題が発生しました (ただし、1.9.32 に戻しても問題は解決しませんでした)。Cloud Platform コンソールは、SDK バージョン 1.9.35 を示します。
必死になって私は試しました:
- クリーン&リビルド(ライブラリプロジェクトにも依存)、
- GAE で新しいバージョンを削除して再アップロードする
- 別のバージョン番号でコードを再アップロードする
からのバージョンpom.xml
:
<commons.codec.version>1.10</commons.codec.version>
<commons.io.version>2.4</commons.io.version>
<commons.lang3.version>3.4</commons.lang3.version>
<commons.validator.version>1.5.0</commons.validator.version>
<freemarker.version>2.3.20</freemarker.version>
<google.http.client.version>1.21.0</google.http.client.version>
<guava.version>19.0</guava.version>
<guice.servlet.version>4.0</guice.servlet.version>
<guice.version>4.0</guice.version>
<jackson.version>2.7.0</jackson.version>
<jersey.version>2.5.1</jersey.version>
<joda.money.version>0.10.0</joda.money.version>
<junit.version>4.12</junit.version>
<lombok.version>1.16.6</lombok.version>
<objectify.version>5.1.9</objectify.version>
<stripe.version>1.38.0</stripe.version>
<appengine.version>1.9.32</appengine.version>
<gcloud.plugin.version>2.0.9.88.v20151125</gcloud.plugin.version>
<resources.plugin.version>2.7</resources.plugin.version>
(1~2本抜けてるかも)