‘jvm-1.8’不是’-target’的有效选择

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

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 } 

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

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

构建,执行,部署 – > 编译器 – > Scala编译器 – >默认

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

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

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

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

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

 subprojects { tasks.withType(ScalaCompile) { sourceCompatibility = "1.7" targetCompatibility = "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构建时只收到此错误。

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

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

 sourceCompatibility = 1.7 

完成后,使IntelliJ IDEA再次导入Gradle项目。 然后,您应该通过检查以下内容确认IntelliJ已选择更改: 设置 – >构建,执行,部署 – >编译器 – > Scala编译器

查看列出的每个模块的Additional compiler options字段,确保它包含-target:jvm-1.7 ,而不是-target:jvm-1.8

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

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

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

使用

compile 'org.scala-lang:scala-library:2.10.7'

解决问题,

在2.10.7版本的Scala支持1.8中添加了。

https://github.com/scala/scala/commit/69b79ba971ae1c8415da372432f55368617d1f2d

IntelliJ无需任何更改/黑客即可编译所有内容。