Scala 不是基于 Java 10

Scala not builds on Java 10

在通过 Intellij Idea 构建时,我收到以下消息:

Error:scalac: 'jvm-1.10' is not a valid choice for '-target' Error:scalac: bad option: '-target:jvm-1.10'

稍后,在 Java 升级后

Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JVM: 1.8 Build, Execution, Deployment -> Complier -> Scala Complier -> Scala Compile Server -> JDK: 1.8

build.gradle

compileScala.targetCompatibility = 1.8
ScalaCompileOptions.metaClass.useAnt = false

没有任何帮助!

更新: 这有助于:在 build.gradle

tasks.withType(ScalaCompile) {
    scalaCompileOptions.useAnt = false
}

不需要:

compileScala.targetCompatibility = 1.8 
ScalaCompileOptions.metaClass.useAnt = false

"Error:scalac: 'jvm-1.10' is not a valid choice for '-target' Error:scalac: bad option: '-target:jvm-1.10'"

  • 在下面提到的JDK兼容性说明中,也表示 Java 10 不完全支持 Scala 2.12.6 JDK 9 & 10 兼容性说明
  • 正如您所说的,您是通过 IntelliJ IDEA 构建的,我怀疑 你还没有配置你的 java 版本 (Java 10) 或 scala 版本 (2.12.6)里面运行配置项目settings.

  • 另外请通过
    试用building/compile您的应用程序 命令行以检查您是否遇到相同的错误 有了那个(否则这只是 IDEA 中的错误配置,你
    需要改变)

JDK 9 和 10 兼容性说明(在 Scala 文档中提到)

JDK 9 & 10 兼容性说明 从 Scala 2.12.6 和 2.11.12 开始,JDK 9 & 10 支持不完整。值得注意的是,scalac 不会强制执行 Java 平台模块系统的限制,这意味着类型检查的代码可能会在运行时产生链接错误。

JDK 9 & 10 支持需要最低 sbt 版本 1.1.0,或 0.13.x 系列中的 0.13.17。

有关 JDK 9 和 10 兼容性的更多信息,请观看 GitHub 上的“支持 JDK 9”问题。

使用 java 11 和 scala 2.12.10 的混合多模块 gradle 项目可能会发生同样的问题。

在这种情况下,通过

重新配置 IntelliJ (2019.2) 可能会有所帮助

Settings > Build, Execution, Deployment > Scala Compiler

通过 删除在 Additional compiler options 中为受影响的 Scala 模块定义的目标。

我遇到与Java 11 相同的问题时偶然发现了这个问题。Roland Ewald 的重新配置评论解决了这个问题。值得一提的是,必须对项目的所有模块进行这种重新配置(至少对我来说这是必要的),而且 IntelliJ 有时会隐藏 Additional compiler options 的部分内容,因此请务必点击即使它们 看起来 是空的或正确的,也要展开。