Подтвердить что ты не робот

Связывание с play.api.db.DBApi уже было настроено, эволюция и ошибка инжектора с помощью play-slick

Я хочу ввести slick в мой проект игры, поэтому добавляю следующие зависимости к build.sbt:

"com.typesafe.play"          %% "play-slick"               % "1.0.1"     withSources(),
  "com.typesafe.play"          %% "play-slick-evolutions"    % "1.0.1"     withSources(),

Затем, когда я запускаю спецификацию интеграции для контроллера, я получил следующее исключение как на Intellij IDE, так и на тест активатора командной строки. После Google я нашел решение: https://www.playframework.com/documentation/2.4.x/PlaySlickFAQ#A-binding-to-play.api.db.DBApi-was-already-configured

После того как я удалил зависимость jdbc, спецификация интеграции передала, когда я использую командную строку, однако я все же получил ту же ошибку, когда я запускал тест в Intellij IDE как следующую ошибку: Исключение, возникающее при вызове запуска во вложенном наборе. Невозможно создать инжектор, см. Следующие ошибки:

1) A binding to play.api.db.DBApi was already configured at play.api.db.DBModule.bindings(DBModule.scala:25):
Binding(interface play.api.db.DBApi to ProviderConstructionTarget(class play.api.db.DBApiProvider)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1).
  at play.api.db.slick.evolutions.EvolutionsModule.bindings(EvolutionsModule.scala:15):
Binding(interface play.api.db.DBApi to ConstructionTarget(class play.api.db.slick.evolutions.internal.DBApiAdapter) in interface javax.inject.Singleton) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)

1 error
com.google.inject.CreationException: Unable to create injector, see the following errors:

1) A binding to play.api.db.DBApi was already configured at play.api.db.DBModule.bindings(DBModule.scala:25):
Binding(interface play.api.db.DBApi to ProviderConstructionTarget(class play.api.db.DBApiProvider)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1).
  at play.api.db.slick.evolutions.EvolutionsModule.bindings(EvolutionsModule.scala:15):
Binding(interface play.api.db.DBApi to ConstructionTarget(class play.api.db.slick.evolutions.internal.DBApiAdapter) in interface javax.inject.Singleton) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)

1 error
    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93)
    at play.api.test.FakeApplication.<init>(Fakes.scala:216)
    at org.scalatestplus.play.OneServerPerSuite$class.app(OneServerPerSuite.scala:152)
4b9b3361

Ответ 1

Если вы похожи на меня, у вас есть что-то вроде этого в файле build.sbt

libraryDependencies ++= Seq(
  jdbc,
  cache,
  ws,
  specs2 % Test,
  "mysql" % "mysql-connector-java" % "5.1.37",
  "com.typesafe.play" %% "play-slick" % "1.1.1",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.1"
)

удалить jdbc

libraryDependencies ++= Seq(
  //jdbc, //<<---- this one here
  cache,

Ответ 2

Вероятно, вы добавили зависимость от jdbc, которая не имеет смысла, если вы используете для этого пятно. Удалите его, и он будет работать.