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"
我正在使用这个:
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"