我有一个 Scala 测试项目,它将一些信息写入 mysql 数据库。我使用 sbt 设置项目,并使用 sbt-eclipsify 这样我就可以从 eclipse 运行它。我还使用 sbt 插件 sbt-assembly 创建了一个 jar,其中包含我从依赖 jar 中需要的所有类。我可以从 eclipse 和 sbt 毫无问题地运行该程序。
我从 sbt-assembly 构建的单个 jar 运行它:
java -classpath target/test1-assembly-1.0-SNAPSHOT.jar example.InsertDataIntoDatabase
但它失败了:
No suitable driver found for jdbc:mysql://localhost:3306/test
我的第一个想法是 sbt-assembly 可能缺少 mysql 驱动程序依赖项,但我解压缩了 jar,并在其中找到了 com/mysql/jdbc/Driver.class。
是否还缺少其他一些依赖项?
如何解决?
最佳答案
我在使用 sbt-assembly 时遇到了这个问题“uberjar”我的应用程序的插件。在我的例子中,问题在于在组装过程中丢失了 META-INF/services/java.sql.Driver
文件。所以我需要更改程序集配置以使文件保持原样:
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs@_*) =>
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
}
关于mysql - 找不到适合 jdbc :mysql when running from single jar 的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645549/