scala - para - Ya se configuró un enlace a play.api.db.DBApi, las evoluciones y el error del inyector con play-slick
intellij scala (2)
Probablemente haya agregado dependencia a jdbc, lo cual no tiene sentido si usa Slick para ello. Retíralo y funcionará.
Quiero introducir Slick en mi proyecto de juego, así que agrego las siguientes dependencias a build.sbt:
"com.typesafe.play" %% "play-slick" % "1.0.1" withSources(),
"com.typesafe.play" %% "play-slick-evolutions" % "1.0.1" withSources(),
Luego, cuando ejecuté una especificación de integración para el controlador obtuve la siguiente excepción tanto en el IDE de Intellij como en la prueba del activador de línea de comandos. Después de que Google encontré la solución: https://www.playframework.com/documentation/2.4.x/PlaySlickFAQ#A-binding-to-play.api.db.DBApi-was-already-configured
Después de eliminar la dependencia jdbc, la especificación de integración pasó cuando usé la línea de comandos, sin embargo, aún obtuve el mismo error cuando ejecuté la prueba en el IDE de Intellij como el siguiente error: se encontró una excepción al invocar ejecutar en una suite anidada. No se puede crear inyector, ver los siguientes errores:
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)
Si eres como yo, tienes algo como esto en tu 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"
)
eliminar jdbc
libraryDependencies ++= Seq(
//jdbc, //<<---- this one here
cache,