我的项目在 Intellij sbt 控制台中运行没有问题。
但是在使用 sbt 程序集编译后,当我使用 Spark-submit 运行 jar 时,我得到了:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
我按照 GCP 建议 here 围绕我的依赖项尝试了很多不同的方法。
我使用 sbt 和程序集插件。
这是我的 sbt 文件:
name := "firestore-dump"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies += "com.google.firebase" % "firebase-admin" % "6.11.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.4"
libraryDependencies += "org.yaml" % "snakeyaml" % "1.18"
libraryDependencies += "net.liftweb" %% "lift-json" % "3.3.0"
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("com.google.common.**" -> "repackaged.com.google.common.@1").inAll,
ShadeRule.rename("com.google.protobuf.**" -> "repackaged.com.google.protobuf.@1").inAll
)
assemblyMergeStrategy in assembly := {
entry: String => {
val strategy = (assemblyMergeStrategy in assembly).value(entry)
if (strategy == MergeStrategy.deduplicate) MergeStrategy.first
else strategy
}
}
如有任何帮助,我们将不胜感激
最佳答案
Guava 的 Preconditions.checkArgument(boolean, String, Object)
是从 Guava 20.0 开始引入的。我猜你的依赖项有旧版本。
你会尝试声明 Guava 依赖 > 20.0 吗?比如
libraryDependencies += "com.google.guava" %% "guava" % "26.0-android"
关于java - Spark 和 Google Cloud Firestore 与 SBT 的依赖性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59268178/