2017-09-01 93 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"`