1

Ich versuche, meine Firebase-Datenbank von Google App Engine zu bearbeiten. gefolgt Tutorials ist, erhalte ich die folgende Fehlermeldung -Konnte FirebaseThreadManagers-Fehler in Firebase nicht initialisieren

java.lang.NoClassDefFoundError: Could not initialize class com.google.firebase.internal.FirebaseThreadManagers

Manchmal sehe ich folgendes:

org.slf4j.LoggerFactory is a restricted class. Please see the Google App Engine developer's guide for more details. 

Der Fehler tritt bei FirebaseOptions, wie weiter unten in meinem Code zu sehen.

 FileInputStream serviceAccount = new FileInputStream("WEB-INF/MyApp.json"); 

    FirebaseOptions options = new FirebaseOptions.Builder() 
      .setCredentials(GoogleCredentials.fromStream(serviceAccount)) 
      .setDatabaseUrl("https://MyApp.firebaseio.com") 
      .build(); 

    FirebaseApp.initializeApp(options); 

Hier ist der Fehler in voller

java.lang.NoClassDefFoundError: Could not initialize class com.google.firebase.internal.FirebaseThreadManagers at com.google.firebase.FirebaseOptions$Builder.(FirebaseOptions.java:147) at com.example.name.myapplication.backend.MyServlet.doGet(MyServlet.java:55) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 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.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.DevAppServerModulesFilter.doRedirectedModuleRequest(DevAppServerModulesFilter.java:415) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:128) 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 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) at com.google.appengine.tools.development.JettyContainerService.forwardToServer(JettyContainerService.java:458) at com.google.appengine.tools.development.Modules.forwardToInstance(Modules.java:372) at com.google.appengine.tools.development.DelegatingModulesFilterHelper.forwardToInstance(DelegatingModulesFilterHelper.java:95) at com.google.appengine.tools.development.DevAppServerModulesFilter.doRedirect(DevAppServerModulesFilter.java:326) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:119) 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 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:511) 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.HttpParser.parseNext(HttpParser.java:547) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

mein build.gradle für das Backend Hier

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.google.appengine:gradle-appengine-plugin:1.9.42' 
    } 
} 

repositories { 
    jcenter(); 
} 

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'appengine' 

sourceCompatibility = JavaVersion.VERSION_1_7 
targetCompatibility = JavaVersion.VERSION_1_7 

dependencies { 
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.42' 
    compile 'javax.servlet:servlet-api:2.5' 
    compile 'com.google.firebase:firebase-admin:5.5.0' 
    compile 'com.squareup.retrofit2:retrofit:2.1.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
    compile 'com.google.code.gson:gson:2.6.1' 


    appengine { 
     downloadSdk = true 
     appcfg { 
      oauth2 = true 
     } 
    } 
} 

Top-Level-Build-Datei:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.1' 


     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
     classpath 'com.google.gms:google-services:3.1.0' 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
     maven { url "https://maven.google.com" } 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 
+0

Sie haben dies sowohl mit "android" als auch mit "google-app-engine" getaggt. Scheint so, als ob es das eine oder das andere sein sollte, aber nicht beides. Verwenden Sie das Firebase-admin SDK für GAE? –

+0

Entschuldigung, ja. Ich verwende Google App Engine als Backend für meine Android App. Dies ist ausschließlich mit GAE zu tun. Ich verwende Firebase-admin SDK. Es ist eine meiner Abhängigkeiten neben Firebase-Datenbank und Firebase-Core. – PSLDev

+0

Ich habe gerade Ihre genaue 'Build.gradle' getestet, und es hat gut für mich funktioniert. Mein Bauchgefühl ist, dass die Androiden-Plugins in Ihrem Projekt einen inkonsistenten Zustand hatten. Ich würde empfehlen, das Projektverzeichnis ('gradle clean') zu säubern und zu versuchen, die App erneut auszuführen. –

Antwort

0

Verwenden Sie keine die Firebase-Admin-Abhängigkeit neben dem anderen Android cl Bibliotheken in einer Server-App. Firebase-Admin allein hat alles, was Sie für den Zugriff auf Realtime Database in einer JVM-Laufzeit benötigen. Die Android-Client-Bibliotheken werden in einer Server-App nicht benötigt, da sie eine Android-Infrastruktur erfordern.

+0

Wenn ich die anderen Firebase-Abhängigkeiten entfernen, erhalte ich den Fehler "Fehler: Version: 5.5.0 ist niedriger als die Mindestversion (9.0.0) für Google-Dienste-Plugin erforderlich ". In meiner Top-Level-Build-Datei habe ich "classpath" com.google.gms: google-services: 3.1.0 '"unter Abhängigkeiten und" maven {url "https://maven.google.com"} "unter Repositories. – PSLDev

+0

Verwenden Sie auch nicht das Google-Services-Plugin für Nicht-Android-Entwickler. –

+0

Ich habe diese Änderungen vorgenommen, aber es gibt immer noch den gleichen Fehler, leider – PSLDev

Verwandte Themen