Firebase Admin SDK无法从jar文件内部连接到数据库

我正在开发一个带有Firebase的Android应用程序,并决定使用Firebase Admin SDK创建一个简单的管理应用程序。 使用IDE(IntelliJ IDEA)启动并通过Admin SDK连接到数据库可以正常工作,但启动导出的.jar文件时,Admin 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,一切工作正常,这使得测试非常困难。

使用IntelliJ和gradle创建.jar文件,打包.jar文件中的依赖关系,并将其保留在外部,从.jar文件或外部使用admin-key加载.json文件,问题总是发生。

为了用gradle创建.jar,build.gradle文件包含下面的jar-block:

 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 GUI。 只有Firebase连接无效。 当我使用应用程序插件而不是“gradle jar”时,也会发生同样的情况。

已弃用的课程:

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