为什么我应该使用 jdk1.8.0 而不是 jdk-17?

Why should I use jdk1.8.0 instead of jdk-17?

我正在使用 IntelliJ IDEA 学习 Scala。项目 SDK 一直是 jdk-17,一切正常,直到现在。

我开始练习演员(Akka in action using Scala)。问题(如 scalac: Error: Error compiling the sbt component 'compiler-interface-2.11.8-61.0')开始编译书籍示例。建议使用 jdk1.8.0,这很有帮助。我不明白为什么我应该使用 jdk1.8.0 而不是 jdk-17? 17 > 1.8.0? jdk1.8.0_XXX是实际的SDK吗?

build.sbt

name := "fault-tolerance"

version := "1.0"

organization := "com.manning"

scalaVersion := "2.11.8"

libraryDependencies ++= {
  val akkaVersion = "2.4.19"
  Seq(
    "com.typesafe.akka"       %%  "akka-actor"                     % akkaVersion,
    "com.typesafe.akka"       %%  "akka-slf4j"                     % akkaVersion,
    "com.typesafe.akka"       %%  "akka-testkit"                   % akkaVersion   % "test",
    "org.scalatest"           %% "scalatest"                       % "3.0.0"       % "test"
  )
}

根据 Scala JDK compatibility list:

JDK version Minimum Scala versions
18 2.13.7, 2.12.15
17 2.13.6, 2.12.15
11 2.13.0, 2.12.4, 2.11.12
8 2.13.0, 2.12.0, 2.11.0, 2.10.2

如果您想使用 JDK17,您至少需要使用 Scala 2.12.15。

但是您的项目指定了 Scala 版本 2.11.8,它不支持 1.8 之后的任何 JDK 版本。

所以你要么需要

  • 如果您想使用 Java17
  • ,请升级您的项目以使用 Scala 2.12.15
  • 如果您想使用 Java11
  • ,请升级您的项目以使用 Scala 2.11.12
  • 否则你会卡在 Java 8