添加依赖后执行sbt run报错,提示spark-streaming 3.1.2依赖未找到
错误原因
- Spark 3.1.2 无 Scala 3 适配版本:Spark 3.1.2 官方仅发布了适配 Scala 2.12、Scala 2.13 的构建包,未提供 Scala 3 对应的依赖版本,因此无法从公共仓库拉取对应组件。
- 依赖声明格式不符合 sbt 规则:Scala 生态的依赖通常会携带对应 Scala 版本的后缀,sbt 中需要使用
%%分隔组织名和依赖名,才能自动拼接当前项目的 Scala 版本作为依赖后缀。当前配置使用%声明 Spark 依赖,会直接查找无 Scala 版本后缀的依赖包,而这类包在公共仓库中不存在,和报错信息中拉取无后缀的spark-streaming:3.1.2失败的表现一致。
解决方案
可根据实际需求任选以下一种方案修改配置:
方案1:保留 Spark 3.1.2 版本,降级项目 Scala 版本
将项目 Scala 版本切换为 Spark 3.1.2 支持的 2.12.x 或 2.13.x 版本,同时修正依赖声明格式,修改后的 build.sbt 参考如下:
val scala2Version = "2.12.15" lazy val root = project .in(file(".")) .settings( name := "scala3-simple", version := "0.1.0", scalaVersion := scala2Version, libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test", libraryDependencies += "org.apache.spark" %% "spark-streaming" % "3.1.2", libraryDependencies += "org.apache.spark" %% "spark-core" % "3.1.2" )
修改完成后重新执行 sbt run 即可正常拉取依赖。
方案2:保留 Scala 3 版本,升级 Spark 版本
Spark 从 3.3.0 版本开始提供 Scala 3 适配版本,将 Spark 依赖升级到 3.3.0 及以上版本,同时修正依赖声明格式,修改后的 build.sbt 参考如下:
val scala3Version = "3.0.2" lazy val root = project .in(file(".")) .settings( name := "scala3-simple", version := "0.1.0", scalaVersion := scala3Version, libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test", libraryDependencies += "org.apache.spark" %% "spark-streaming" % "3.3.0", libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.0" )
修改完成后重新执行 sbt run 即可正常拉取依赖。
内容的提问来源于stack exchange,提问作者Mustafa Hayat
相关产品推荐
相关产品推荐

