Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A binding to play.api.db.DBApi was already configured, evolutions and injector error with play-slick

I want to introduce slick to my play project, so I add the following dependencies to build.sbt:

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

Then, when I run an integration spec for controller I got following exception both on Intellij IDE and command line activator test. After Google I found the solution: https://www.playframework.com/documentation/2.4.x/PlaySlickFAQ#A-binding-to-play.api.db.DBApi-was-already-configured

After I removed the jdbc dependency, the integration spec passed when I using the command line, however I still got the same error when I run the test on Intellij IDE as following error: Exception encountered when invoking run on a nested suite - 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 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) 
like image 577
ttt Avatar asked Oct 07 '15 23:10

ttt


2 Answers

If you are like me, you have something like this in your 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" ) 

remove jdbc

libraryDependencies ++= Seq(   //jdbc, //<<---- this one here   cache, 
like image 65
user2977416 Avatar answered Sep 21 '22 22:09

user2977416


You have probably added dependency to jdbc which doesn't make sense if you use slick for it. Remove it and it will work.

like image 41
Krzysztof Kur Avatar answered Sep 18 '22 22:09

Krzysztof Kur