Playframework [Scala]:Class 在 Play for Scala 的类路径中找不到

Playframework [Scala]: Class not found in classpath in Play for Scala

我已经添加到 build.sbt Apache Derby jar:

libraryDependencies += "org.apache.derby" % "derby" % "10.14.1.0" % Test

我也运行activator update,似乎工作正常。

我需要在应用程序中嵌入 Derby 的数据库,因此我尝试实例化与它的连接:

 println(1)
 Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance()
 println(2)
 val url = "jdbc:derby://localhost:1527/tempdb;create=true;user=me;password=mine"
 val conn = DriverManager.getConnection(url)   
 println(3)

上面的代码只打印了1然后产生了异常。我认为这主要是因为 class 不在 class 路径中(异常消息只是 class 名称)。这里缺少什么?

首先,不需要在驱动class对象上调用.newInstance()。 "classic" 方法就是调用 Class.forName(arg) 以强制加载 class。

其次Class.forName(arg) 调用是多余的,自 JBDC 4 以来不是必需的,正如 DriverManager doc 所说:

Applications no longer need to explictly load JDBC drivers using Class.forName(). Existing programs which currently load JDBC drivers using Class.forName() will continue to work without modification.

第三,受益于在 Play 中配置数据库连接的标准方式!框架,通过 application.conf 文件中的配置尝试它可能很有用:

db.default.driver=org.apache.derby.jdbc.EmbeddedDriver
db.default.url="jdbc:derby://localhost:1527/tempdb..."

More details here.

第四% Test 依赖声明中的作用域看起来很可疑。如果要在应用程序的主代码中使用该连接,则会忽略该依赖项,并且不会找到 class。