为什么不自动将libraryDependencies添加到类路径?

时间:2017-09-01 18:23:01

标签: java scala sbt

为什么不自动将libraryDependencies添加到类路径?我试图将jdbc-sqlite添加到我的项目,但它找不到驱动程序。 lib依赖项由sbt管理,因此它应该是类路径的一部分。但我猜不是,所以如何添加呢?

定义对这些库的路径引用只是存在于我的盒子上,这是不好的做法。

name := "CacheWarmer"

version := "0.1"

scalaVersion := "2.12.3"

mainClass in Compile := Some("process.Daemon")

libraryDependencies ++= Seq(
  "org.xerial" % "sqlite-jdbc" % "3.20.0" % "test"
)

package process

import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.SQLException
import java.sql.Statement

代码

object Daemon {
  def main(args: Array[String]): Unit = {
    //Gets java.sql.SQLException: No suitable driver found for jdbc:sqlite::memory:
    val connection:Connection = DriverManager.getConnection("jdbc:sqlite::memory:")
  }
}

2 个答案:

答案 0 :(得分:2)

您已将sqlite-jdbc依赖项放入test范围。当然,这种依赖关系只能在测试类路径中使用,但不能在“主”类路径中使用。通常,您使用test范围来测试依赖关系,例如测试库如Scalatest或JUnit。

为了使您的“main”类路径中的库可用,您必须使用compile范围,或者等效地,根本不使用范围分类器:

libraryDependencies ++= Seq(
  "org.xerial" % "sqlite-jdbc" % "3.20.0"
)

答案 1 :(得分:1)

Maven Central告诉我要在SBT中使用该依赖项:

libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.20.0" - >请注意,没有双%

%%告诉sbt将当前的scala版本附加到工件名称。假设你正在运行scala 2.11:

libraryDependencies += "org.some" %% "myscala" % "3.20.0"

被解雇了:

`libraryDependencies += "org.some" % "myscala_2.11" % "3.20.0"`