'jvm-1.8' 不是“-target”的有效选择

'jvm-1.8' is not a valid choice for '-target'

当我尝试制作我的项目时,IntelliJ 抱怨出现以下异常。

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

但是 'gradlew clean install' 工作得很好。

项目设置为:

gradle 版本 2.3

scala 2.10 和 java

4 个模块中的 3 个使用 java 1.7(源和目标兼容性),第 4 个模块具有源和目标兼容性 1.8 并导致问题。

有什么办法可以避免该错误吗? (移动到 java 7 不是一个选项,升级 scala 是)

Gradle 默认使用 ant 任务构建 Scala 代码,https://issues.scala-lang.org/browse/SI-8966 表明直到 Scala 2.11.5 才将 jvm 1.8 添加为受支持的目标。

您可以通过添加以下 gradle 构建文件来尝试使用基于 Zinc 的编译器。

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

您可能还需要将 zinc 编译器添加到依赖项列表中。

我一直在寻找解决这个问题的方法,终于找到了 - 与其他阅读本文的人分享。

取自:https://devnet.jetbrains.com/message/5523902

subprojects {
    tasks.withType(ScalaCompile) {
        sourceCompatibility = "1.7"
        targetCompatibility = "1.7"
    }
}

在 Intellij IDEA (15 CE) 中添加此 scalac 编译器选项:

构建、执行、部署 -> 编译器 -> Scala 编译器 -> 默认

其他编译器选项-target:jvm-1.7(为空)。

还有配置文件 Gradle 1,... -target:jvm-1.8,所以我也将它们更改为 -target:jvm-1.7

我正在使用 Scala 2.10、JVM 1.8、源兼容性 1.7。它对我的情况有所帮助。

如果您使用 JDK 1.8 作为 IntelliJ 项目 SDK,则默认项目语言级别和源兼容性可能默认设置为版本 8。这也将反映在 IntelliJ 的 Scala 编译器设置中。

要覆盖默认的 Java 8 语言级别,我只需要将以下内容添加到我的 build.gradle:

sourceCompatibility = 1.7

完成后,让 IntelliJ IDEA 再次导入 Gradle 项目。然后,您应该通过检查以下项来确认更改已被 IntelliJ 接受:Settings -> Build, Execution, Deployment -> Compiler -> Scala Compiler

查看列出的每个模块的 其他编译器选项 字段,确保它包含 -target:jvm-1.7,而不是 -target:jvm-1.8

Project Settings -> Modules 下,您应该会看到 Language Level 现在设置为 7 也是。

N.B。在 Gradle 属性 allprojectssubprojects 下设置 sourceCompatibility 属性 或使用 tasks.withType(ScalaCompile) 对我不起作用;必须单独指定才能拾取。

(使用 IntelliJ IDEA 2017.2.3、Gradle 4.1、Gradle Scala 插件和 Scala 2.10 版对我有用)

我使用带 JRE 1.8.0、scala 2.10.5 和 gradle 3.3 的 IntelliJ 2017.2.5 收到了相同的错误消息。我通过选中位于

的 IntelliJ IDE 中的 "Delegate IDE build/run actions to gradle" 复选框解决了我的问题

设置>构建、执行、部署>构建工具>Gradle>运行器

可在此处找到详细信息:https://docs.gradle.org/4.2.1/userguide/scala_plugin.html#ideaTargetVersion and https://www.jetbrains.com/help/idea/gradle.html

值得注意的是,我能够在 IntelliJ(即 cmd 行)之外构建我的 gradle 项目,并且仅在尝试使用 IntelliJ IDE.[=11= 构建时收到此错误]

就我而言,我已通过消除 POM 中提到的 scala-sdk 与导入全局库之间的冲突来解决。

检查 pom.xml 中的 scala-sdk 版本,并检查您添加的全局库 scala-sdk。它应该是一样的。

从@Alan Effrig 的回答中添加。 直到 Scala 2.11.5 才将 JVM 1.8 添加为受支持的目标。

在我的IDE中,Scala版本选择为2.11.0,更新到最新的2.11.12解决了这个问题。