Java 代码在开发服务器上工作,在GAE上启动失败
直到最近,我的代码在GAE和dev服务器上都运行良好。最近我上传了一个新版本,但在服务器上根本不起作用,在我的本地机器(dev服务器)上运行良好。旧版本继续在服务器上工作 每次我点击更新版本的任何URL时,都会在日志中找到以下stracktrace:Java 代码在开发服务器上工作,在GAE上启动失败,java,google-app-engine,jersey,objectify,jsr311,Java,Google App Engine,Jersey,Objectify,Jsr311,直到最近,我的代码在GAE和dev服务器上都运行良好。最近我上传了一个新版本,但在服务器上根本不起作用,在我的本地机器(dev服务器)上运行良好。旧版本继续在服务器上工作 每次我点击更新版本的任何URL时,都会在日志中找到以下stracktrace: Uncaught exception from servlet java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
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)
(可能遗漏了1或2)修复方法是更改此依赖项:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
javax.ws.rs
这也是@peeskillet的评论出现的时候。您使用的是2.5.1
和jsr311
,这是一个问题。Jersey 2使用JAX-RS 2.0,与jsr311不兼容。它在dev中是如何工作的?可能是类加载的差异。JAX-RS2.0和jsr311都是应用程序类,但JAX-2.0是一个较新的版本,它确实具有getProperties方法。不幸的是,当您看到这个错误时,这意味着jsr311的应用程序类是正在加载类的,而不是JAX-RS2.0版本。摆脱jsr311,看看会发生什么谢谢,这正是我从阅读中意识到的,当你的评论弹出时,我正在改变它:-)。
<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>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>