Play 在类路径上找不到 play.db.DBModule
Play can't find play.db.DBModule on the classpath
我正在尝试将 Play 2.4 与 MyBatis 一起使用,但仍然保留 HikariCP 连接池和新的基于 Guice 的依赖注入。
尝试查看页面时出现以下错误:
CreationException: Unable to create injector, see the following errors:
1) No implementation for play.db.Database was bound.
但是它应该从位于 play-jdbc_2.11-2.4.2.jar
的 play.db.DBModule
内部界定,对吗?
所以我强行将它添加到application.conf
(这应该不是必需的,因为它已经在Jar的reference.conf
中添加
play.modules.enabled += "play.db.DBModule"
这使得错误更严重:
play.api.PlayException: Cannot load module[Module [play.db.DBModule] cannot be instantiated.]
...snip...
Caused by: java.lang.ClassNotFoundException: play.db.DBModule
at java.net.URLClassLoader.run(URLClassLoader.java:372) ~[na:1.8.0_20]
at java.net.URLClassLoader.run(URLClassLoader.java:361) ~[na:1.8.0_20]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_20]
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_20]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_20]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_20]
at play.api.inject.Modules$$anonfun$locate.apply(Module.scala:105) ~[play_2.11-2.4.2.jar:2.4.2]
... 36 common frames omitted
呜呜呜? ØÒ
这清楚地表明这个东西不在类路径上(或者类加载器找不到),对吧?但应该是!
当我询问 activator
到 show fullClasspath
时,它显示 Attributed(/Users/<me>/.ivy2/cache/com.typesafe.play/play-jdbc_2.11/jars/play-jdbc_2.11-2.4.2.jar)
已包含在内。
可能在说谎但即使询问 lsof -p <PID>
也告诉我该进程已声明该文件。
这是我的 build.sbt
,有人知道我可能做错了什么吗?
name := """MyBatisWithGuiceAndPlay"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
cache,
javaWs,
jdbc,
"com.google.guava" % "guava" % "18.0",
"org.mybatis" % "mybatis" % "3.3.0",
"org.mybatis" % "mybatis-guice" % "3.6",
"com.google.inject.extensions" % "guice-multibindings" % "4.0",
"org.freemarker" % "freemarker" % "2.3.23",
"org.webjars" % "yui-pure" % "0.5.0",
"org.webjars" % "jquery" % "2.1.4",
"org.webjars" % "select2" % "4.0.0-2",
"org.webjars" % "datatables" % "1.10.7",
"org.webjars" % "datatables-fixedheader" % "2.1.2-1"
)
将 jdbc
替换为 javaJdbc
。 build.sbt
java 依赖项以 java
为前缀并遵循 play.*
包名称约定。 Scala 依赖项位于 play.api.*
个包中。
我正在尝试将 Play 2.4 与 MyBatis 一起使用,但仍然保留 HikariCP 连接池和新的基于 Guice 的依赖注入。
尝试查看页面时出现以下错误:
CreationException: Unable to create injector, see the following errors:
1) No implementation for play.db.Database was bound.
但是它应该从位于 play-jdbc_2.11-2.4.2.jar
的 play.db.DBModule
内部界定,对吗?
所以我强行将它添加到application.conf
(这应该不是必需的,因为它已经在Jar的reference.conf
中添加
play.modules.enabled += "play.db.DBModule"
这使得错误更严重:
play.api.PlayException: Cannot load module[Module [play.db.DBModule] cannot be instantiated.]
...snip...
Caused by: java.lang.ClassNotFoundException: play.db.DBModule
at java.net.URLClassLoader.run(URLClassLoader.java:372) ~[na:1.8.0_20]
at java.net.URLClassLoader.run(URLClassLoader.java:361) ~[na:1.8.0_20]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_20]
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_20]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_20]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_20]
at play.api.inject.Modules$$anonfun$locate.apply(Module.scala:105) ~[play_2.11-2.4.2.jar:2.4.2]
... 36 common frames omitted
呜呜呜? ØÒ 这清楚地表明这个东西不在类路径上(或者类加载器找不到),对吧?但应该是!
当我询问 activator
到 show fullClasspath
时,它显示 Attributed(/Users/<me>/.ivy2/cache/com.typesafe.play/play-jdbc_2.11/jars/play-jdbc_2.11-2.4.2.jar)
已包含在内。
可能在说谎但即使询问 lsof -p <PID>
也告诉我该进程已声明该文件。
这是我的 build.sbt
,有人知道我可能做错了什么吗?
name := """MyBatisWithGuiceAndPlay"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
cache,
javaWs,
jdbc,
"com.google.guava" % "guava" % "18.0",
"org.mybatis" % "mybatis" % "3.3.0",
"org.mybatis" % "mybatis-guice" % "3.6",
"com.google.inject.extensions" % "guice-multibindings" % "4.0",
"org.freemarker" % "freemarker" % "2.3.23",
"org.webjars" % "yui-pure" % "0.5.0",
"org.webjars" % "jquery" % "2.1.4",
"org.webjars" % "select2" % "4.0.0-2",
"org.webjars" % "datatables" % "1.10.7",
"org.webjars" % "datatables-fixedheader" % "2.1.2-1"
)
将 jdbc
替换为 javaJdbc
。 build.sbt
java 依赖项以 java
为前缀并遵循 play.*
包名称约定。 Scala 依赖项位于 play.api.*
个包中。