使用sbt拉取Scala hello-world模板时遭遇java.lang.NoClassDefFoundError错误的求助
解决
sbt new scala/hello-world.g8时的NoClassDefFoundError问题 这个错误java.lang.NoClassDefFoundError: scala/reflect/internal/Trees通常是由于sbt版本与系统中存在的Scala版本冲突导致的,结合你的环境(Spark 2.4.7自带Scala 2.11.x,而sbt 1.5.0默认依赖的Scala版本为2.12+/2.13+),具体解决方案如下:
清理冲突的环境变量
Spark自带的Scala会被添加到系统PATH中,可能优先于sbt所需的Scala版本加载。你可以临时修改环境变量:- 打开系统环境变量设置,找到
PATH里的Spark相关Scala路径(通常是...\spark-2.4.7\bin或包含scala.exe的路径),暂时移除它 - 确保
SCALA_HOME没有指向Spark自带的Scala目录,或者直接取消SCALA_HOME的设置(sbt会自动管理自身所需的Scala版本)
- 打开系统环境变量设置,找到
指定sbt使用兼容的Scala版本
在执行命令时显式指定与sbt 1.5.0兼容的Scala版本(比如2.12.15),命令如下:sbt -Dsbt.scala.version=2.12.15 new scala/hello-world.g8清空sbt缓存目录
旧的缓存依赖可能导致版本冲突,删除以下目录后重新运行命令:C:\Users\<你的用户名>\.sbtC:\Users\<你的用户名>\.ivy2
验证JDK环境的正确性
确保JAVA_HOME指向JDK 1.8.0_221,并且PATH中优先加载该JDK的bin目录,避免其他JDK版本干扰。可以在终端执行java -version和javac -version确认版本一致。
内容的提问来源于stack exchange,提问作者Tldr
相关产品推荐
相关产品推荐

