【问题标题】:'jvm-1.8' is not a valid choice for '-target'“jvm-1.8”不是“-target”的有效选择
【发布时间】:2015-05-16 11:36:36
【问题描述】:

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

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

但是“gradlew 全新安装”可以正常工作。

项目设置是:

gradle 2.3 版

scala 2.10 和 java

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

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

【问题讨论】:

  • IntelliJ 是否在 java 7 上运行?
  • 关于屏幕显示 1.8_20

标签: java scala intellij-idea gradle java-8


【解决方案1】:

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

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

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

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

【讨论】:

  • hm,gradle 构建确实有效,我只在 intellij 中看到了这个问题。好吧,我将升级 scala 版本,看看会发生什么。
  • 接受,因为这指向了正确的方向。我仍然不明白细节,但在构建脚本中升级到 scala 2.11 解决了 intellij 中的问题
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    在 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。这对我有帮助。

    【讨论】:

    • 完成上述操作后,我得到了异常 Error:scala: bad option: '-target:jvm-1.8' , @Bohumir Zamecnik
    【解决方案4】:

    如果您使用 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

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

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

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

    【讨论】:

    • 添加 sourceCompatibility = 1.7targetCompatibility = 1.7 对我有用(Gradle 4.6、Scala 2.10.2 项目、IntelliJ 2018)。谢谢!
    【解决方案5】:

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

    的“将 IDE 构建/运行操作委托给 gradle”复选框解决了我的问题

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

    详情请见:https://docs.gradle.org/4.2.1/userguide/scala_plugin.html#ideaTargetVersionhttps://www.jetbrains.com/help/idea/gradle.html

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

    【讨论】:

    • 是的,为什么要更改 build.gradle 当它可以解决时,这是正确的答案
    • 这对我来说适用于 Java 11 的类似问题。
    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      来自@Alan Effrig 的回答。 直到 Scala 2.11.5 之后,JVM 1.8 才被添加为受支持的目标。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-18
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 2020-04-17
        • 2012-12-07
        相关资源
        最近更新 更多