Firebase Admin NoClassDefFoundError: FirebaseOptions$Builder

Firebase Admin NoClassDefFoundError: FirebaseOptions$Builder

我正在使用这个:

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 在应用程序的根目录中。

这是什么原因造成的?

问题原来是我用这条命令来构建的:

gradlew clean install

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

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

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

希望对您有所帮助

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

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

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