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



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

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

但是"gradlew 全新安装"工作得很好。

项目设置为:

格拉德尔 2.3 版

Scala 2.10 和 Java

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

任何想法如何避免错误?(迁移到Java 7不是一个选项,升级Scala是)

在Intellij IDEA(公元15年)中添加以下scalac编译器选项:

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

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

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

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

我使用 IntelliJ 2017.2.5 w/JRE 1.8.0、scala 2.10.5 和 gradle 3.3 时收到相同的错误消息。 我通过选中 IntelliJ 的 IDE 中的"将 IDE 构建/运行操作委托给 gradle"复选框解决了我的问题,该复选框位于

设置>构建,执行,部署>构建工具>Gradle>Runner

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

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

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

您可以尝试使用基于 Zinc 的编译器,方法是添加以下 gradle 构建文件。

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

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

多年来我一直在寻找解决方案,终于找到了 - 分享给其他阅读本文的人。

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

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

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

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

sourceCompatibility = 1.7

完成此操作后,让IntelliJ IDEA再次导入Gradle项目。然后,您应该通过检查以下检查来确认 IntelliJ 已选取更改:设置 -> 生成、执行、部署 -> 编译器 -> Scala 编译器

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

在"项目设置"->"模块"下,您应该看到"语言级别"现在也设置为 7

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

(这对我来说是使用 IntelliJ IDEA 2017.2.3、Gradle 4.1、Gradle Scala 插件和 Scala 2.10 版)

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

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

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

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

最新更新