NoSuchMethodError:将Firebase与应用引擎应用集成

我试图将firebase实时数据库与谷歌应用引擎应用集成。 我打电话时遇到这个错误

> DatabaseReference ref = FirebaseDatabase > .getInstance() > .getReference("todoItems"); 

Stacktrace是

03:21:01.450 / productSync java.lang.NoSuchMethodError:com.google.mon.base.Preconditions.checkState(ZLjava / lang / String; Ljava / lang / Object;)V在com.google.firebase.FirebaseApp上出错。 checkNotDeleted(FirebaseApp.java:314)位于com.google.firebase.FirebaseApp.getOptions(FirebaseApp.java:260)的com.google.firebase.database.FirebaseDatabase.getInstance(FirebaseDatabase.java:80)at.prago.servlet .ProductDataSync.doGet(ProductDataSync.java:83)位于org.mortbay的javax.servlet.http.HttpServlet.service(HttpServlet.java:617)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)。位于com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)中的jetty.servlet.ServletHolder.handle(ServletHolder.java:511) ParseBlobUploadFilter.java:125)位于com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) SaveSessionFilter.java:37)atg.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)at org,com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60) .mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)位于org.mortbay.jetty.servlet.ServletHandler的com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48) $ CachedChain.doFilter(ServletHandler.java:1157)org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)at Org.mortbay.jetty.servle.SessionHandler.handle(SessionHandler.java:182)org.mortbay.jetty.handle.ContextHandler.handle(ContextHandler.java:765)org.mortbay.jetty.webapp.WebAppContext.handle( WebAppContext.java:418)at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.ja va:257)org.mortbay.jetty.handle.HandlerWrapper.handle(HandlerWrapper.java:152)org.mortbay.jetty.Server.handle(Server.java:326)atg.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542)org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923)位于org的com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)。来自com.google.apphosting.runtime.JavaRuntime $ requestRunnable.dispatchServletRequest的com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:145)中的mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) JavaRuntime.java:644)com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchRequest(JavaRuntime.java:604)at com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.run(JavaRuntime.java:574)at com com.google.tracing.TraceContex上的.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:453) t $ TraceContextRunnable $ 1.run(TraceContext.java:460)at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293)at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319)at at com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311)位于com.google.trace.TraceContext $ TraceContextRunnable.run(TraceContext.java:457)com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry。在java.lang.Thread.run上运行(ThreadGroupPool.java:238)(Thread.java:745)

许多论坛都讨论过同样的问题,人们建议将Guava 19.0升级到Guava 20.0。 在我的情况下,我没有使用任何这样的库,因此我尝试添加两个,但它并没有为我解决。 每次都有相同的错误。 我也在添加我的pom.xml文件,万一有人需要查看它。 任何帮助,将不胜感激。

这是一个这样的论坛的链接https://github.com/google/guava/issues/2380

   4.0.0 war 1.0  1 1.9.53 UTF-8    com.google.firebase firebase-admin 5.0.0   com.google.guava guava 20.0    com.google.endpoints endpoints-framework 2.0.7   com.google.appengine appengine-api-1.0-sdk ${appengine.target.version}   com.google.appengine appengine-endpoints ${appengine.target.version}   javax.servlet servlet-api 2.5 provided   javax.inject javax.inject 1   com.googlecode.objectify objectify 5.0   com.google.endpoints endpoints-management-control-appengine 1.0.0-beta.11   com.google.endpoints endpoints-framework-auth 1.0.0-beta.11    com.google.appengine appengine-testing ${appengine.target.version} test   com.google.appengine appengine-api-stubs ${appengine.target.version} test   junit junit 4.11    target/${project.artifactId}-${project.version}/WEB-INF/classes   org.apache.maven.plugins 2.5.1 maven-compiler-plugin  1.7 1.7    com.google.cloud.tools endpoints-framework-maven-plugin 1.0.0-beta5      org.apache.maven.plugins maven-war-plugin 2.3  ${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml    ${project.build.directory}/generated-sources/appengine-endpoints   WEB-INF/*.discovery WEB-INF/*.api       com.google.appengine appengine-maven-plugin ${appengine.target.version}  false     endpoints_get_discovery_doc          org.eclipse.m2e lifecycle-mapping 1.0.0       com.google.appengine   appengine-maven-plugin   [1.9.3,)    endpoints_get_discovery_doc               in.prago prago  

更新:

正如Auberon所建议的那样,我用新版本的Objectify 5.1.17更新了我的pom.xml,并删除了番石榴的依赖性。 我尝试运行代码,但同样的错误再次创造。 这是我的堆栈跟踪

 > com.google.api.server.spi.SystemService invokeServiceMethod: exception > occurred while calling backend method (SystemService.java:398) > > java.lang.NoSuchMethodError: > com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)V > at > com.google.firebase.FirebaseApp.checkNotDeleted(FirebaseApp.java:314) > at com.google.firebase.FirebaseApp.getOptions(FirebaseApp.java:260) > at > com.google.firebase.database.FirebaseDatabase.getInstance(FirebaseDatabase.java:80) > at > in.prago.spi.PragoMerchantApi.saveProfile(PragoMerchantApi.java:189) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:42) at > com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:363) > at > com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113) > at > com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at > javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) > at > com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) > at > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > at org.mortbay.jetty.Server.handle(Server.java:326) at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) > at > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > at > com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453) > at > com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460) > at > com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293) > at > com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319) > at > com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311) > at > com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457) > at java.lang.Thread.run(Thread.java:745) 

http://maven.apache.org/xsd/maven-4.0.0.xsd“>

  4.0.0 war 1.0  1 1.9.53 UTF-8    com.google.firebase firebase-admin 5.0.0   com.google.endpoints endpoints-framework 2.0.7   com.google.appengine appengine-api-1.0-sdk ${appengine.target.version}   com.google.appengine appengine-endpoints ${appengine.target.version}   javax.servlet servlet-api 2.5 provided   javax.inject javax.inject 1   com.googlecode.objectify objectify 5.1.17   com.google.endpoints endpoints-management-control-appengine 1.0.0-beta.11   com.google.endpoints endpoints-framework-auth 1.0.0-beta.11    com.google.appengine appengine-testing ${appengine.target.version} test   com.google.appengine appengine-api-stubs ${appengine.target.version} test   junit junit 4.11    target/${project.artifactId}-${project.version}/WEB-INF/classes   org.apache.maven.plugins 2.5.1 maven-compiler-plugin  1.7 1.7    com.google.cloud.tools endpoints-framework-maven-plugin 1.0.0-beta5      org.apache.maven.plugins maven-war-plugin 2.3  ${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml    ${project.build.directory}/generated-sources/appengine-endpoints   WEB-INF/*.discovery WEB-INF/*.api       com.google.appengine appengine-maven-plugin ${appengine.target.version}  false     endpoints_get_discovery_doc          org.eclipse.m2e lifecycle-mapping 1.0.0       com.google.appengine   appengine-maven-plugin   [1.9.3,)    endpoints_get_discovery_doc               in.prago prago  

包括项目Guava更新版本依赖。

  com.google.guava guava 22.0  

我也遇到了这个错误,我从未使用过番石榴。 有趣的是,我的Glassfish服务器使用的是Guava版本而不是导入的版本! 在错误发生之前运行此代码,以找出有问题的Guava来自哪里。

System.out.println(com.google.common.base.Preconditions.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm());

然后下载最新的番石榴(目前是Guava 22.0 )并用新的番石榴文件替换旧的番石榴文件。 这应该可以解决您的问题。

此时,您还应该使用较新的firebase版本。 我相信开发人员在以前的firebase版本中也有错误的Guava版本。

   com.google.firebase firebase-admin 5.2.0