mysql - 找不到适合 jdbc :mysql when running from single jar 的驱动程序

标签 mysql scala sbt

我有一个 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/

相关文章:

mysql - 从相关表中获取每个 id 的计数

PHP/mySQL 数据未显示在表中

scala - 如何依赖 GitHub 中的 PlayProject?

json - 玩转Scala 2.3,JSON Array转Sequence

scala - 在scala中根据条件创建两个列表

scala - SBT:编译和打包—— "working tree not clean"

java - 为什么当我进行单元测试时,我得到的覆盖点是 `final lazy val` 而不是 `final val`?

php - 如何从n个表中只获取n条记录

mysql - 插入该行时,如何使用自动增量值(主键列)作为同一行中另一列的一部分?

java - 尝试将 HashMap 转换为 scala ListMap