2011-07-11 10 views
3

私はいくつかの情報をmysqlデータベースに書き込むScalaテストプロジェクトを持っています。私はsbtでプロジェクトをセットアップし、sbt-eclipsifyを使用してEclipseから実行できます。また、sbtプラグインsbt-assemblyを使用して、依存jarから必要なすべてのクラスを持つ単一のjarファイルを作成しました。私は日食とsbtから問題なくプログラムを走らせることができます。jdbc:mysqlのドライバが見つかりません。

私はSBT-アセンブリのビルド、単一のjarファイルから実行していない:

java -classpath target/test1-assembly-1.0-SNAPSHOT.jar example.InsertDataIntoDatabase 

が、それはで失敗します。

JDBCが見つかりませ最適なドライバ:mysqlの:// localhostを:3306 /テスト

私の最初の考えは、sbt-assemblyがmysqlドライバの依存関係を逃している可能性がありますが、jarファイルを解凍してcom/mysql/jdbc/Driver.classが見つかりました。

他の依存関係はありますか?

どうすれば解決できますか?

答えて

0

初期化コードの例を教えてください。

JDBCドライバは通常、静的初期化コードを呼び出してDriverManagerに登録するためにドライバのクラスを読み込む必要があります。 MySQLの場合、これはで行うことができます。

Class.forName("com.mysql.jdbc.Driver") 
1

「uberjar」私のアプリにsbt-assemblyプラグインを使用しているとき、私はこの問題に遭遇しました。私の場合、問題は組み立てプロセス中にファイルMETA-INF/services/java.sql.Driverを失うことにありました。だから私は、アセンブリの設定を変更してファイルを所定の位置に留める必要がありました:

assemblyMergeStrategy in assembly := { 
    case PathList("META-INF", [email protected]_*) => 
    xs.map(_.toLowerCase) match { 
     case ("manifest.mf" :: Nil) | 
      ("index.list" :: Nil) | 
      ("dependencies" :: Nil) | 
      ("license" :: Nil) | 
      ("notice" :: Nil) => MergeStrategy.discard 
     case _ => MergeStrategy.first // was 'discard' previousely 
    } 
    case "reference.conf" => MergeStrategy.concat 
    case _ => MergeStrategy.first 
} 
関連する問題