You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Gradle Scala Plugin编译报错‘jvm-1.11’不是有效-target选项问题

解决Scala编译报错:'jvm-1.11' is not a valid choice for '-target'

问题根源

你使用的Scala版本是2.10.4,这个版本的Scala编译器仅支持最高-target:jvm-1.8的目标参数,但Gradle因配置了Java 11工具链,会自动将JVM版本11传递给ScalaCompile任务,导致传入了不被支持的-target:jvm-1.11,从而触发编译失败。

可行解决方案

方案1:强制指定Scala编译的目标JVM版本(无需修改Java工具链)

直接在Gradle配置中为ScalaCompile任务添加编译器参数,覆盖默认的target设置:

tasks.withType(ScalaCompile) {
    scalaCompileOptions.additionalParameters = ["-target:jvm-1.8"]
}

如果担心Gradle自动添加的参数冲突,可以用更严谨的方式过滤后添加:

tasks.withType(ScalaCompile) {
    doFirst {
        // 移除原有-target参数,再添加指定的jvm-1.8
        def filteredParams = scalaCompileOptions.additionalParameters.findAll { !it.startsWith("-target:") }
        scalaCompileOptions.additionalParameters = filteredParams + ["-target:jvm-1.8"]
    }
}

这样配置后,Scala代码会编译为JVM 1.8兼容的字节码,而Java代码仍可使用JVM 11编译,两者能在JVM 11环境下正常运行(JVM向下兼容)。

方案2:升级Scala版本(备选)

如果项目依赖允许,将Scala版本升级到2.12或更高版本(Scala 2.12及以上支持JVM 8+,包括11),修改依赖配置:

dependencies {
    implementation 'org.scala-lang:scala-library:2.12.17' // 或其他兼容的高版本
}

升级后Gradle的Java 11工具链配置可正常配合Scala编译,无需额外修改参数。

为什么之前的配置无效?

Gradle 7.x中,ScalaCompileOptions的sourceCompatibility和targetCompatibility并不会直接覆盖Gradle根据Java工具链自动生成的编译器参数,因此需要通过additionalParameters直接指定Scala编译器的参数才能生效。

内容的提问来源于stack exchange,提问作者Eric Kolotyluk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:25:22