Scala升级至2.11.12后接口静态方法编译报错求助(Gradle构建)
解决Scala 2.11.12升级后“Static methods in interface require -target:jvm-1.8”编译错误
我之前也碰到过一模一样的问题,Scala 2.11.12开始对JVM目标版本的校验严格了不少——尤其是代码里用到接口静态方法这类JDK8特性时,必须明确指定编译目标为JVM 1.8才行。你之前的配置大概率没命中Gradle Scala编译任务的正确参数,试试下面的方案:
方案1:全局配置所有Scala编译任务
在你的build.gradle中添加这段配置,确保所有Scala编译任务都带上JVM 1.8的目标参数:
tasks.withType(ScalaCompile) { // 显式添加Scala编译的JVM目标参数 scalaCompileOptions.additionalParameters = ["-target:jvm-1.8"] // 同步Java的源和目标兼容性为1.8,避免版本不匹配 sourceCompatibility = '1.8' targetCompatibility = '1.8' }
方案2:通过Scala插件块配置
如果你的项目用了Gradle的Scala插件,也可以直接在scala块里配置:
scala { targetCompatibility = '1.8' scalaCompileOptions { additionalParameters += "-target:jvm-1.8" } }
额外排查步骤
- 要是你是多模块项目,得确保每个子模块都应用了这个配置,或者在根项目的
build.gradle里用subprojects块统一配置:subprojects { apply plugin: 'scala' tasks.withType(ScalaCompile) { scalaCompileOptions.additionalParameters = ["-target:jvm-1.8"] sourceCompatibility = '1.8' targetCompatibility = '1.8' } } - 清理Gradle缓存并重新构建,避免旧缓存干扰:
./gradlew clean build --refresh-dependencies
这个问题本质是Scala 2.11.12调整了默认编译参数的校验逻辑,而Gradle 4.5的Scala插件不会自动适配这个变化,所以必须手动显式指定目标JVM版本。
内容的提问来源于stack exchange,提问作者Wins
相关产品推荐
相关产品推荐

