Firebase Admin SDK no se puede conectar a la database desde el file jar

Estoy desarrollando una aplicación de Android con Firebase y he decidido crear una aplicación de administración simple con Firebase Admin SDK. Iniciar con el IDE (IntelliJ IDEA) y conectarse a la database a través del Admin SDK funciona bien, pero al iniciar el file .jar exportado, el Admin SDK no se puede conectar a la Base de datos. Para inicializar la connection a Firebase, utilizo el siguiente código (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() .setCnetworkingential(FirebaseCnetworkingentials.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() 

Agregué algunas salidas de console y descubrí que el código simplemente no pasa esta línea: "database = FirebaseDatabase.getInstance ()". Simplemente bloquea el hilo y no pasa nada. Además, no se arroja ninguna exception. Como dije, esto solo ocurre en el file jar exportado, cuando se comienza con el IDE, todo funciona bien, lo que hace que las testings sean muy difíciles.

Al crear el file .jar con IntelliJ y con Gradle, empaquetar las dependencies dentro del file .jar y dejarlas en el exterior, cargando el file .json con la key de administración desde dentro del file .jar o desde afuera, el problema siempre ocurre

Para crear .jar con gradle, el file build.gradle contiene el siguiente bloque 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" me proporciona un file .jar con todas las dependencies y resources colocados correctamente dentro del file. La aplicación también contiene una GUI JavaFX que se inicia correctamente. Solo la connection de Firebase no funciona. Lo mismo sucede cuando uso el complemento de la aplicación en lugar de "jar gradle".

Clase obsoleta :

FirebaseCnetworkingentials

Esta class estaba en desuso. Use GoogleCnetworkingentials.

del ejemplo QuickStart:

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

Usando GoogleCnetworkingentials en GoogleCnetworkingentials lugar.

  • Obteniendo java.lang.VerifyError al hacer una request de cadena usando Android Volley en Kotlin
  • Formateo de comentarios de Kotlin en IntelliJ / Android Studio
  • ¿Cómo nombrar un hilo?
  • Argumentos pnetworkingeterminados frente a sobrecargas, cuándo usar qué
  • ¿Podemos lograr security de tipo de time de compilation para una unión de types que no podemos controlar?
  • Realm, findAllSorted y distinct
  • Genéricos de Kotlin: tipo de desajuste en el parámetro de map genérico
  • ¿Existe alguna forma clara de utilizar los methods de extensión de Groovy en Kotlin?
  • ¿Cómo implementa HashMap la interfaz MutableMap en Kotlin?
  • Kotlin: ¿cómo devolver la instancia del service en ejecución en la carpeta?
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia