2017-09-01 45 views
0

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

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

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:") 
    } 
} 
+0

当然编译/运行时依赖都在SBT运行和测试类路径。 – cchantep

+0

不是根据我的运行时间,它说它找不到我的jdbc-sqlite驱动程序 –

回答

2

你已经把sqlite-jdbc依赖到test范围。当然,这种依赖只能在测试类路径中使用,而不能在“main”类路径中使用。通常,您使用test作用域进行测试依赖性,例如测试库如Scalatest或JUnit。

为了图书馆在你的“主”类路径供,你必须使用compile范围,或者等价地,不使用范围分类在所有:

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

他们没有一个scala版本的问题导致问题没有找到合适的scala版本。 –

+0

@ Dr.Knowitall对不起,我的不好,应该删除'%%'而不是'%'。由于这是一个纯Java库,因此不需要将Scala二进制版本附加到它,这正是'%%'所做的。修复了答案。 –

0

Maven的中央告诉使用在SBT这种依赖,你应该使用:

libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.20.0" - >公告不存在双重%

%%告诉SBT到当前版本阶追加到艺术如果名字。假设你正在运行的Scala 2.11:

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

被desuggered到:

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