【问题标题】:Compiling a Scala program failing Due to Dependencies not found编译Scala程序由于找不到依赖项而失败
【发布时间】:2020-05-15 23:26:14
【问题描述】:

我已经安装了 Flink、Scala 和 sbt Flink 版本:1.9.1 斯卡拉版本:2.10.6 Sbt 版本:1.3.7

我在 build.sbt 中进行了相关更改。 编译命令失败 这是相关信息。 任何信息都非常感谢

**版本信息

[osboxes@osboxes local]$ scala -version

Scala 代码运行器版本 2.10.6 -- 版权所有 2002-2013,LAMP/EPFL

[osboxes@osboxes local]$ flink --version

版本:1.9.1,提交 ID:4d56de8

[osboxes@osboxes readcsvfile]$ sbt -version

本项目中的sbt版本:1.3.7

sbt 脚本版本:1.3.7

** build.sbt 更改

val flinkVersion = "1.9.1"

val flinkDependencies = Seq(
  "org.apache.flink" %% "flink-scala" % flinkVersion % "provided",
  "org.apache.flink" %% "flink-streaming-scala" % flinkVersion % "provided")

** 编译错误

sbt:readCsvfile> compile
[info] Updating 
[info] Resolved  dependencies
[warn] 
[warn]  Note: Unresolved dependencies path:
[error] stack trace is suppressed; run last update for the full output
[error] (update) sbt.librarymanagement.ResolveException: Error downloading org.apache.flink:flink-streaming-scala_2.13:1.9.1
[error]   Not found
[error]   Not found
[error]   not found: /home/osboxes/.ivy2/local/org.apache.flink/flink-streaming-scala_2.13/1.9.1/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/org/apache/flink/flink-streaming-scala_2.13/1.9.1/flink-streaming-scala_2.13-1.9.1.pom
[error] Error downloading org.apache.flink:flink-scala_2.13:1.9.1
[error]   Not found
[error]   Not found
[error]   not found: /home/osboxes/.ivy2/local/org.apache.flink/flink-scala_2.13/1.9.1/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/org/apache/flink/flink-scala_2.13/1.9.1/flink-scala_2.13-1.9.1.pom
[error] Total time: 4 s, completed Jan 30, 2020 3:59:12 PM
sbt:readCsvfile>

【问题讨论】:

  • 我认为 flink 还不支持 Scala 2.13。尝试显式拉取 2.12 的版本
  • Scala 代码运行器版本 2.10.6 -- 版权所有 2002-2013,LAMP/EPFL 是我的 Scala 版本
  • 计算机上安装的 Scala 版本无关紧要。检查项目 Scala 版本(在 build.sbt 中),它显然试图拉 2.13。 flink-scala_2.13:1.9.1 里面的 2.13 是 Scala 版本,1.9.1 是 flink 版本。应该是拉flink-scala_2.12:1.9.1
  • Scala 2.10 太旧,2.13 太新,请按照@sinanspd 的建议尝试使用2.12。此外,您必须了解您不必在本地安装所有内容,Scala 的工作方式与 Python 不同。 SBT 为每个项目创建一个 virtual env,您可以在那里配置您需要的一切,sbt 版本、Scala 版本、依赖项及其版本。您唯一需要在机器上安装的就是 JDK。

标签: scala sbt apache-flink


【解决方案1】:

关于 SBT 依赖问题,我想在此提及的几点是:

  1. 请像这样在build.sbt 文件中添加scalaVersion := "2.12.11",由于this%%,它会自动将Scala 版本包含在您的SBT 依赖项中。
name := "flink-streaming-demo"

scalaVersion := "2.12.11"

val flinkVersion = "1.10.0"

libraryDependencies += "org.apache.flink" %% "flink-scala" % flinkVersion % "provided"
libraryDependencies += "org.apache.flink" %% "flink-streaming-scala" % flinkVersion % "provided"
  1. 如果您想要 Scala 版本特定的 SBT 依赖项,请使用 %,如下所示:
libraryDependencies += "org.apache.flink" % "flink-scala_2.12" % flinkVersion % "provided"
libraryDependencies += "org.apache.flink" % "flink-streaming-scala_2.12" % flinkVersion % "provided"
  1. 在最坏的情况下,如果所有这些都不起作用,那么只需在系统主目录中删除或重命名这些现有的 .sbt.ivy2 隐藏文件夹,从 maven Central 下载后,您的所有依赖项和插件都会在该文件夹中丢失然后刷新/构建 SBT 项目。

  2. SBT 依赖格式

libraryDependencies += groupID % artifactID % revision % configuration
  1. %%% 的含义
    • %:一种用于根据您提供的字符串构造 Ivy 模块 ID 的方法。
    • %%:在 groupID 之后使用时,它会自动将您项目的 Scala 版本(例如 _2.12)添加到工件名称的末尾。

注意:要了解更多详情,请点击here

【讨论】:

    【解决方案2】:

    总结一下 cmets,因为可能有点难以知道你应该做什么

    一般来说,如果您收到“未解决的依赖项”错误,请查看 mvnrepository.com,搜索您的工件:

    https://mvnrepository.com/artifact/org.apache.flink/flink-scala

    这会告诉您(第二列)它支持哪些 Scala 版本。在这种情况下,该库可用于 2.11.x 和 2.12.x。

    因此,您必须在build.sbt

    中使用与在您的构建中 兼容的Scala 版本
    ThisBuild / scalaVersion := "2.12.10"
    

    【讨论】:

    • 得到执行错误如下:osboxes@osboxes flink-1.9.1]$ flink run -C file:/home/osboxes/Downloads/flink-1.9.1/lib/flink-cep-scala_2 .11-1.9.1.jar -C 文件:/home/osboxes/Downloads/flink-1.9.1/lib/flink-gelly-scala_2.11-1.9.1.jar /home/osboxes/sarma/scala/readcsvfile /target/scala-2.12/readcsvfile_2.12-0.1.0-SNAPSHOT.jar 开始执行程序 Started java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcVI$sp
    • 你的 flink 运行时错误。 Scala 2.11 和 Scala 2.12 有运行时。如果使用 Scala 版本 2.12.x 进行编译,则需要使用 Scala 2.12.x 的运行时。下载 apache.org/dyn/closer.lua/flink/flink-1.9.1/… 或使用 Scala 2.11 重建您的项目。
    • ScalaVersion 2.11.10 做了正确的事。 $FLINK_HOME/opt, flink-cep_{Scala Version}-{Flink Version}.jar 应该使用什么版本。现在编译完成并且工作正常。这是结论
    • 注意,您应该始终使用适用于您的目标的最新 Scala 版本,在本例中为 2.11.12
    • 从哪里获得最新版本(在您的回复中您说 2.11.12)?我在这里看不到任何颠覆mvnrepository.com/artifact/org.apache.flink/flink-scala
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2021-07-02
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多