8 votes

Firebase Admin NoClassDefFoundError : FirebaseOptions$Builder

J'utilise ceci :

FileInputStream serviceAccount;
    try {
        serviceAccount = new FileInputStream("firebase_key.json");
    } catch (FileNotFoundException e) {
        System.out.println(e.getMessage());
        return;
    }
    System.out.println("Reached here!");

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
            .setDatabaseUrl("https://*.firebaseio.com/")
            .build();

    FirebaseApp.initializeApp(options);

Cependant, l'application se bloque avec un java.lang.NoClassDefFoundError for FirebaseOptions$Builder

Mon build.gradle :

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile 'com.google.firebase:firebase-admin:4.1.1'
}

J'utilise IntelliJ.

Logcat :

    Exception in thread "main" java.lang.NoClassDefFoundError: com/google/firebase/FirebaseOptions$Builder
10:57:43 AM web.1 |     at com.x.*.TokenGenerator.main(TokenGenerator.java:26)
10:57:43 AM web.1 |  Caused by: java.lang.ClassNotFoundException: com.google.firebase.FirebaseOptions$Builder
10:57:43 AM web.1 |     at java.net.URLClassLoader.findClass(Unknown Source)
10:57:43 AM web.1 |     at java.lang.ClassLoader.loadClass(Unknown Source)
10:57:43 AM web.1 |     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
10:57:43 AM web.1 |     at java.lang.ClassLoader.loadClass(Unknown Source)

J'ai mon firebase_key.json dans la racine de l'application.

Quelle en est la cause ?

4voto

Ab_ Points 2323

Le problème s'est avéré être que j'utilisais cette commande pour construire :

gradlew clean install

Cependant, le bocal généré par cette méthode ne contient pas le nom de l'utilisateur. Dépendances . Et le Firebase Admin SDK est une dépendance.

Donc ce que j'ai fait, c'est que j'ai utilisé shadowJar qui génère un Jar contenant des dépendances. Contrairement à gradlew clean install .

Ensuite, dans le Procfile, je le place dans le Jar que shadowJar génère. Le seul problème que je vois est que je dois maintenant aller dans IntelliJ et exécuter le shadowJar à partir de là, puisqu'il ne semble pas y avoir de commande pour l'exécuter à partir de la ligne de commande.

J'espère que cela vous aidera

1voto

Dus Points 2216

Vous ne définissez pas le bon import dans les options de gradle pour firebase, il n'y a pas besoin du paquet admin, vous avez besoin du paquet core :

Au lieu de compile 'com.google.firebase:firebase-admin:4.1.1'

Utilisez compile "com.google.firebase:firebase-core:10.0.1"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X