当我尝试制作项目时,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 version 2.3
scala 2.10和java
4个模块中的3个使用java 1.7(源和目标兼容性),第4个模块具有源和目标兼容性1.8并导致问题。
我有什么想法可以避免错误吗? (移动到java 7不是一个选项,升级scala是)
答案 0 :(得分:10)
在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。它对我有帮助。
答案 1 :(得分:7)
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
}
您可能还需要将锌编译器添加到依赖项列表中。
答案 2 :(得分:7)
我使用IntelliJ 2017.2.5 w / JRE 1.8.0,scala 2.10.5和gradle 3.3得到了相同的错误消息。我通过检查"委托IDE构建/运行操作来解决我的问题#34; IntelliJ的IDE中的复选框位于
设置>构建,执行,部署>构建工具> Gradle>亚军
可在此处找到详细信息: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构建时只收到此错误。
答案 3 :(得分:5)
我多年来一直在寻找解决方案,终于找到了 - 分享给其他读这篇文章的人。
取自:https://devnet.jetbrains.com/message/5523902
subprojects {
tasks.withType(ScalaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
}
答案 4 :(得分:1)
如果您使用JDK 1.8作为IntelliJ Project 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 。
N.B。在Gradle属性sourceCompatibility
,allprojects
或使用subprojects
下设置tasks.withType(ScalaCompile)
属性对我不起作用;它必须单独指定才能被选中。
(这对我使用IntelliJ IDEA 2017.2.3,Gradle 4.1,Gradle Scala插件和Scala版本2.10)
答案 5 :(得分:0)
对于我来说,我已解决了以下问题:消除了POM中提到的scala-sdk与导入全局库之间的冲突。
检查pom.xml中的scala-sdk版本,并检查已添加的全局库scala-sdk。它应该是相同的。
答案 6 :(得分:0)
从@Alan Effrig的答案中添加。 直到Scala 2.11.5才将JVM 1.8添加为受支持的目标。
在我的IDE中,Scala版本被选择为2.11.0,将其更新为最新的2.11.12解决了该问题。