Команда запуска SBT не очищает статические переменные с автоматической перезагрузкой - PullRequest
0 голосов
/ 19 июня 2019

У меня есть проект playframework, и я добавил в него библиотеку Firebase. Требуется инициализация Firebase перед использованием. Итак, я создал этот код:

class Module extends AbstractModule with ScalaModule {
  override def configure(): Unit = {
    bind[Init].asEagerSingleton()
  }
}
class Init @Inject()(
//some deps here
)(implicit val ec: ExecutionContext) {
      val options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.getApplicationDefault())
        .build()
      FirebaseApp.initializeApp(options)
}

И после run он работает нормально в первый раз, но после автоматической перезагрузки (некоторые изменения кода) я получаю эту ошибку:

java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
  at global.Init.<init>(Init.scala:17)

потому что sbt пытается инициализировать Firebase, но он уже инициализирован.

Я решил это так:

class Init @Inject()(
//some deps here
)(implicit val ec: ExecutionContext) {

  try {
    FirebaseApp.getInstance()
  } catch {
    case e: IllegalStateException =>
      val options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.getApplicationDefault())
        .build()
      FirebaseApp.initializeApp(options)
  }

}

Но, может быть, у кого-то есть более элегантное решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...