运行在JDK11上的Scala 2.11.12/2.12.14能否生成JDK11目标字节码?
核心结论
- Scala 2.11.12 无法生成JDK11目标的字节码,你遇到的参数报错是正常现象。2.11.x是老旧版本系列,2.11.12作为该系列最终版本,编译器支持的最高JVM目标版本就是1.8,仅支持
-target:jvm-1.8参数,没有对应JDK11的参数选项。 - Scala 2.12.14 支持生成JDK11目标的字节码,参数写法为
-target:jvm-11,注意不要写成jvm-1.11。该支持从Scala 2.12.13版本开始正式引入,2.12.14完全继承了该能力。
提示:就算你升级到Scala 2.12.14并生成JDK11字节码,你依赖的Spark 2.4.2本身并不官方支持JDK11运行环境,强行修改字节码目标版本会触发更多未知兼容问题,得不偿失。
场景适配建议
你当前的使用方案已经是最适配的选择:
- 保持
scala-maven-plugin的-target:jvm-1.8配置不变,JDK11完全兼容Java 8版本的字节码(版本号52),不会有功能问题 - 按你已经验证的方案,将依赖的
xbean-asm6-shaded包强制升级到4.10版本,解决Spark内置旧ASM库识别高字节码版本报错的问题即可,不需要额外修改其他编译配置。
内容的提问来源于stack exchange,提问作者Анатолий Сивенко
相关产品推荐
相关产品推荐

