我有一个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
1条答案
按热度按时间hpxqektj1#
字符串
您是否使用了其他与数据库相关的依赖项(如Oracle或MySQL)?如果是这样,您需要更新代码以在创建连接时加载Postgres驱动程序。
型
或者只是删除不必要的sql依赖项。这应该可以解决这个问题。