Firebase管理员NoClassDefFoundError:FirebaseOptions $ Builder

时间:2017-02-14 16:56:35

标签: android firebase firebase-authentication firebase-admin

我正在使用它:

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);

但是,应用程序崩溃了java.lang.NoClassDefFoundError for FirebaseOptions$Builder

我的build.gradle

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

我正在使用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)

我在应用程序的根目录中有我的firebase_key.json。

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:4)

问题结果是我正在使用此命令构建:

gradlew clean install

但是,由此生成的Jar不包含依赖项。 Firebase Admin SDK是一个依赖项。

所以我做的是使用shadowJar,它生成一个包含依赖项的Jar。与gradlew clean install不同。

然后,在Procfile中,我将它设置为shadowJar生成的Jar。我看到的唯一问题是,现在我必须转到IntelliJ并从那里运行shadowJar,因为似乎没有任何命令可以从命令行运行它。

希望这有帮助

答案 1 :(得分:1)

你没有在gradle上为firebase选项设置正确的导入,不需要管理包,你需要核心:

而不是compile 'com.google.firebase:firebase-admin:4.1.1'

使用compile "com.google.firebase:firebase-core:10.0.1"