Scala项目sbt及IntelliJ运行异常求助:含NoClassDefFoundError等问题
解决方案:Scala项目sbt与IntelliJ运行报错问题
一、解决sbt启动时java.lang.NoClassDefFoundError: Could not initialize class sbt.internal.parser.SbtParser错误
- 确认sbt版本兼容性:Scala 2.13.10要求sbt版本≥1.5.0(JDK17需要sbt 1.5.0及以上支持)。检查项目根目录下
project/build.properties文件中的sbt.version,如果是1.4.x及以下版本,修改为1.6.x或1.9.x(如sbt.version=1.9.6)。 - 强制sbt使用JDK17:终端执行
export JAVA_HOME=/path/to/your/jdk17(替换为实际JDK17路径),再启动sbt;若用IntelliJ,在Settings -> Build, Execution, Deployment -> Build Tools -> sbt中,将"JVM"选项指定为JDK17。 - 重新安装兼容版本的sbt:通过coursier执行
cs install sbt:1.9.6,覆盖旧的sbt launcher,避免版本不匹配问题。
二、解决IntelliJ中scalac: Unsupported class file major version 64错误
- 统一项目JDK配置:打开
File -> Project Structure,确保Project SDK为JDK17,所有模块的Module SDK也设置为JDK17。 - 调整Scala编译配置:进入
Settings -> Languages & Frameworks -> Scala,确认项目的Scala SDK为2.13.10,且Compiler target JVM version设置为17;同时在sbt设置页,勾选"Use sbt shell for build and import"并指定JDK17作为其JVM。 - 清理IntelliJ本地缓存:执行
File -> Invalidate Caches... -> Invalidate and Restart,清除旧的编译缓存。 - 排查依赖兼容性:用命令
find . -name "*.jar" -exec javap -v {} | grep "major version" | grep 64 \;扫描项目依赖,找到用JDK20编译的jar包(major version 64对应JDK20),替换为兼容JDK17的版本。
通用排查步骤
- 验证版本一致性:终端执行
java -version和sbt "show javaVersion",确认输出均为JDK17。 - 重新导入项目:删除项目根目录下的
.idea文件夹,再通过IntelliJ重新导入项目,确保配置文件重新生成。
内容的提问来源于stack exchange,提问作者Mac
相关产品推荐
相关产品推荐

