8

Я использую это:

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 в корне приложения.

Что вызывает это?

+0

добавить ваш logcat –

+0

Не думал, что это необходимо. добавленной –

ответ

4

Проблема оказалась в том, что я использовал эту команду, чтобы построить:

gradlew clean install 

Однако Jar порождена, что не содержит зависимости. И SDK Firebase Admin - это зависимость.

Так что я сделал, я использовал shadowJar, который генерирует Jar, который содержит зависимости. В отличие от gradlew clean install.

Затем, в Procfile, я установил его в Jar, который генерирует shadowJar. Единственная проблема, которую я вижу, - теперь я должен пойти в IntelliJ и запустить shadowJar оттуда, так как нет никакой команды запускать ее из командной строки.

Надеется, что это помогает

1

Вы не устанавливая правильный импорт на Gradle для firebase вариантов, нет необходимости в пакет администратора, вам нужно ядро:

Вместо compile 'com.google.firebase:firebase-admin:4.1.1'

Используйте compile "com.google.firebase:firebase-core:10.0.1"