Firebase Admin SDK не может подключаться к базе данных из внутреннего файла jar

Я разрабатываю приложение для Android с Firebase, и я решил создать простое приложение администратора с SDK Firebase Admin. Запуск с IDE (IntelliJ IDEA) и подключение к базе данных с помощью SDK администратора отлично работает, но при запуске экспортированного файла .jar SDK администратора не может подключиться к базе данных. Чтобы инициализировать подключение к Firebase, я использую следующий код (Kotlin):

//Initialize the Firebase Admin SDK. val serviceAccount = this.javaClass.classLoader.getResourceAsStream("fen/ftcConsole/control/flip-the-classroom-app-firebase-adminsdk.json") val options = FirebaseOptions.Builder() .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) .setDatabaseUrl("https://flip-the-classroom-app.firebaseio.com/") .setStorageBucket("flip-the-classroom-app.appspot.com") .build() FirebaseApp.initializeApp(options) //Get the connections to the database and the cloud storage. database = FirebaseDatabase.getInstance() storage = StorageClient.getInstance().bucket() 

Я добавил несколько консольных выходов и выяснил, что код просто не проходит мимо этой строки: «database = FirebaseDatabase.getInstance ()». Он просто блокирует поток, и ничего не происходит. Также исключение не выбрасывается. Как я уже сказал, это происходит только в экспортированном файле jar, когда вы начинаете с IDE, все работает отлично, что очень сложно проверить.

Создавая файл .jar с IntelliJ, а также с градиентом, упаковывая зависимости внутри файла .jar, а также оставляя их снаружи, загружая файл .json с помощью ключа-администратора из файла .jar или извне, проблема всегда происходит.

Для создания .jar с градиентом файл build.gradle содержит следующий jar-блок:

 jar { manifest { attributes 'Main-Class': 'fen.ftcConsole.gui.GUIStarterKt' } //adding project files/resources to the jar file from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 

«gradle jar» дает мне файл .jar со всеми зависимостями и ресурсами, правильно помещенными внутри файла. Приложение также содержит графический интерфейс JavaFX, который запускается правильно. Только соединение Firebase не работает. То же самое происходит, когда я использую плагин приложения вместо «градиента».

Устаревший класс:

FirebaseCredentials

Этот класс устарел. Используйте GoogleCredentials.

из примера QuickStart:

  public static void main(String[] args) { // Initialize Firebase try { // [START initialize] FileInputStream serviceAccount = new FileInputStream("service-account.json"); FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .setDatabaseUrl(DATABASE_URL) .build(); FirebaseApp.initializeApp(options); // [END initialize] } catch (IOException e) { System.out.println("ERROR: invalid service account credentials. See README."); System.out.println(e.getMessage()); System.exit(1); } // Shared Database reference database = FirebaseDatabase.getInstance().getReference(); // Start listening to the Database startListeners(); // Kick off weekly email task startWeeklyTopPostEmailer(); } 

GoogleCredentials этого используйте GoogleCredentials .