【问题标题】:Playframework [Scala]: Class not found in classpath in Play for ScalaPlayframework [Scala]:在 Play for Scala 的类路径中找不到类
【发布时间】:2018-07-31 13:39:46
【问题描述】:

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

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,然后产生异常。我认为这主要是因为该类不在类路径中(异常消息只是类名)。这里缺少什么?

【问题讨论】:

  • 请你添加你得到的异常?
  • 确实,没有异常消息“只是类名”。至少捕获异常并调用 printStackTrace()。

标签: scala playframework playframework-2.0 derby playframework-2.5


【解决方案1】:

首先,不需要在驱动类对象上调用.newInstance()。 “经典”的做法是调用Class.forName(arg) 来强制加载类。

其次,Class.forName(arg) 调用是多余的,从 JBDC 4 开始就没有必要了,正如DriverManager doc 所说:

应用程序不再需要使用 Class.forName() 显式加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将继续工作而无需修改。

第三,受益于在 Play 中配置 DB 连接的标准方式!框架,可以通过application.conf文件中的配置试一试:

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

More details here.

第四,依赖声明中的% Test 范围看起来很可疑。如果要在app的主代码中使用连接,会忽略依赖,找不到类。

【讨论】:

  • 我按照您的建议在 application.conf 中设置了配置,它找到了 jar。请看this
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多