‘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属性allprojects
, subprojects
或使用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无需任何更改/黑客即可编译所有内容。