我在Scala中有一个Spark项目,我试图在其中使用google-cloud-storage
依赖项。以下是build.sbt
val sparkVersion = "2.2.0"
"org.apache.spark" %% "spark-core" % sparkVersion % "provided",
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"com.google.cloud" % "google-cloud-storage" % "1.55.0",
"com.typesafe" % "config" % "1.3.1"
现在,当我构建jar并运行它时,我会遵循Exception。
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
在谷歌搜索时,我发现这是由于我的类路径上的Guava
的多个版本引起的。
为解决此问题,我从Guava
依赖项中排除了google-cloud-storage
。
"com.google.cloud" % "google-cloud-storage" % "1.55.0" exclude("com.google.guava", "guava"),
但是随后出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/cloud/storage/StorageOptions
此错误意味着现在在类路径中没有Guava
个jar。
我的问题是,在排除番石榴之前,由于在classpath上存在多个版本而导致错误,怎么可能?排除一个版本时,为什么没有找到番石榴罐错误呢?
如何解决此错误。
答案 0 :(得分:2)
您可以尝试将guava
依赖项添加为显式依赖项:
libraryDependencies += "com.google.guava" % "guava" % "newest_version"
要找出最新版本,可以使用以下插件:sbt-dependency-graph
或在SBT控制台中检查eviction warnings
。