scala 从单个jar运行时,未找到适用于jdbc:postgresql的驱动程序

tnkciper  于 4个月前  发布在  Scala
关注(0)|答案(1)|浏览(48)

我有一个Scala项目,它将信息提取到postgress数据库中。我在Intellij中使用sbt建立了这个项目。我使用sbt插件sbt-assembly创建了一个jar,其中包含了我需要的所有依赖jar中的类。我可以在Intellij中运行这个程序。
但是如果我从sbt-assembly构建的单个jar运行它:

java -jar /opt/service/sample.jar

字符串
但它失败了,错误:
线程“main”中出现异常java.sql.SQLException:java.sql.SQLException:找不到合适的驱动程序用于jdbc:postgresql://
我解压缩了fatty sample.jar,搜索了postgress jar,但没有找到。sbt-assembly可能遗漏了mysql驱动程序依赖项。
这是我的build.sbt汇编代码。

ThisBuild / libraryDependencies ++= Seq(
  "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  "org.postgresql" % "postgresql" % "42.2.14"
)

import sbtassembly.MergeStrategy
assemblyMergeStrategy in assembly := {
  case PathList("org", "apache", xs @ _*) => MergeStrategy.first
  case PathList("org", "slf4j", xs @ _*) => MergeStrategy.first
  case PathList("org", "aopalliance", xs @ _*) => MergeStrategy.first
  case PathList("jersey", "repackaged", xs @ _*) => MergeStrategy.first
  case PathList("javax", xs @ _*) => MergeStrategy.first
  case PathList("io", "netty", xs @ _*) => MergeStrategy.first
  case PathList("com", "amazonaws", xs @ _*) => MergeStrategy.first
  case PathList("META-INF", xs @ _*) =>
    (xs map {_.toLowerCase}) match {
      case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard
      case _ => MergeStrategy.first
    }
  case PathList("com", "sun", xs @ _*) => MergeStrategy.first
  case PathList("git.properties", xs @ _*) => MergeStrategy.first
  case PathList("mozilla", xs @ _*) => MergeStrategy.first
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}


是否有一些其他的变化,我需要做的上述代码在build.sbt?
尝试在本地运行Jar命令及其工作。

java -cp sampl.jar:/Users/x/.m2/repository/org/postgresql/postgresql/42.2.7/postgresql-42.2.7.jar com.abc.main


因此,请建议在sbt程序集的变化,可以运行脂肪罐,而无需在运行命令中提供额外的jar

hpxqektj

hpxqektj1#

ThisBuild / libraryDependencies ++= Seq(
  "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
  "org.postgresql" % "postgresql" % "42.2.14"
)

字符串
您是否使用了其他与数据库相关的依赖项(如Oracle或MySQL)?如果是这样,您需要更新代码以在创建连接时加载Postgres驱动程序。

Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(url, user, password);


或者只是删除不必要的sql依赖项。这应该可以解决这个问题。

相关问题