【发布时间】:2017-10-11 17:20:58
【问题描述】:
我正在使用 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 块:
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”时也会发生同样的情况。
【问题讨论】:
-
你究竟在做什么来导出这个 jar?
-
我用 jar 文件的 build.gradle 内容更新了问题。如前所述,一切正常,除了 Admin SDK 数据库连接。
-
您是否考虑过使用 Gradle 的应用程序插件来管理这个? docs.gradle.org/current/userguide/application_plugin.html
-
感谢您的回复,我刚刚尝试了应用程序插件,但不幸的是它给了我相同的结果。它编译成功,启动,但没有通过与数据库的连接。
-
这可能是一个凭证问题。确保打包到 jar 中的凭据是正确的,并且可以访问数据库。您还可以启用调试日志以查看发生了什么(使用 SLF4J 或尝试 setLogLevel() 方法)。
标签: java firebase jar kotlin firebase-admin