2017-09-01 14 views
0

sbtが自動的にlibraryDependenciesをクラスパスに追加しないのはなぜですか?私はjdbc-sqliteをプロジェクトに追加しようとしていますが、ドライバを見つけることはできません。 lib依存関係はsbtによって管理されているので、クラスパスの一部でなければなりません。しかし、私はそうではないと思います。どうすれば追加できますか?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

あなたはtestスコープにsqlite-jdbc依存を入れています。当然ながら、そのような依存関係はテストクラスパスでのみ利用できますが、 "メイン"クラスパスでは使用できません。通常、テストの依存関係にはtestスコープを使用します。 ScalatestやJUnitのようなテストライブラリ。

あなたの「メイン」クラスパスで利用できるようにするライブラリのためには、あなたはすべてのスコープの分類器を使用していない、同等に、compileスコープを使用する必要があり、または:

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

スカラーバージョンがないため、スカラーバージョンが見つかりませんでした。 –

+0

@ Dr.Knowitall申し訳ありませんが、私の悪い点は、 '%%'のために '%%'を削除したはずです。これは純粋なJavaライブラリなので、Scalaのバイナリバージョンを追加する必要はありません。これはまさに '%% 'のものです。答えを修正しました。 –

0

Mavenの中央にいることを伝えますSBTでその依存関係を使用するには、使用する必要があります。

libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.20.0" - >を技術と現在のScalaのバージョンを追加するSBTに二重%

%%が伝えがありません注意してくださいifactの名前。あなたはScalaの2.11を実行していると仮定:

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

がにdesuggeredます:

`libraryDependencies += "org.some" % "myscala_2.11" % "3.20.0"` 
関連する問題