Scala运行失败求助:Java版本异常及可靠安装方案咨询
问题分析与解决方案
核心问题
你遇到的错误根源是Scala 2.10.5版本过旧,不兼容Java 11,且当前系统默认Java环境为11——即便安装了Java8,Scala启动时仍调用了Java11。Scala 2.10.x仅支持Java 6/7/8,和Java 9+存在兼容性冲突,导致编译器无法找到Java核心类。
当前问题临时修复方案
1. 临时指定Java 8运行Scala
启动Scala前先切换到Java8环境,同时加上报错提示的-usejavacp参数:
- Windows命令行:
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_xxx # 替换为你的Java8实际安装路径 scala -usejavacp - Linux/macOS终端:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_xxx.jdk/Contents/Home # 替换为实际路径 scala -usejavacp
2. 永久切换系统默认Java版本到8
- Windows:修改系统环境变量,将Java8的
bin目录路径移到PATH最前端;或使用javaw工具切换默认JDK。 - Linux:执行
update-alternatives --config java,选择Java8对应的选项。 - macOS:可使用
jenv工具管理多版本Java,执行jenv global 1.8切换到Java8。
可靠简便的Scala安装方法
推荐使用SDKMAN(跨平台工具,一键管理Java、Scala等开发工具的多版本):
- 安装SDKMAN:
- Windows(PowerShell):
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.sdkman.io') - Linux/macOS:
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" # 重启终端后可省略该步骤
- Windows(PowerShell):
- 安装适配Java的Scala版本:
- 若使用Java8:推荐安装Scala 2.12.x(长期支持版)或2.13.x
sdk install scala 2.12.17 # 2.12.x长期支持版 # 或安装2.13.x版本 sdk install scala 2.13.10 - 若使用Java11+/17:推荐Scala 2.13.x或Scala 3.x
sdk install scala 3.3.1
- 若使用Java8:推荐安装Scala 2.12.x(长期支持版)或2.13.x
- 切换/设置默认版本:
sdk use scala 2.13.10 # 临时切换版本 sdk default scala 2.13.10 # 设置为系统默认版本
版本兼容性说明
Scala与Java版本对应关系:
- Scala 2.10.x:仅支持Java 6/7/8
- Scala 2.11.x:仅支持Java 6/7/8
- Scala 2.12.x:支持Java 8+
- Scala 2.13.x:支持Java 8+
- Scala 3.x:支持Java 8/11/17+
你的报错信息:
Welcome to Scala version 2.10.5 (OpenJDK 64-Bit Server VM, Java 11.0.17). Type in expressions to have them evaluated. Type :help for more information. scala> [init] error: error while loading package, Missing dependency 'object java.lang.Object in compiler mirror', required by C:\PROGRA~2\scala\bin\..\lib\scala-library.jar(scala/package.class) [init] error: error while loading package, Missing dependency 'object java.lang.Object in compiler mirror', required by C:\PROGRA~2\scala\bin\..\lib\scala-library.jar(scala/runtime/package.class) Failed to initialize compiler: object java.lang.Object in compiler mirror not found. ** Note that as of 2.8 scala does not assume use of the java classpath. ** For the old behavior pass -usejavacp to scala, or if using a Settings ** object programatically, settings.usejavacp.value = true. Failed to initialize the REPL due to an unexpected error. This is a bug, please, report it along with the error diagnostics printed below. java.lang.NullPointerException at scala.tools.nsc.interpreter.ExprTyper$codeParser$.applyRule(ExprTyper.scala:24) at scala.tools.nsc.interpreter.ExprTyper$codeParser$.stmts(ExprTyper.scala:35) at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:43) at scala.tools.nsc.interpreter.ExprTyper$$anonfun$parse$2.apply(ExprTyper.scala:42) at scala.tools.nsc.reporters.Reporter.withIncompleteHandler(Reporter.scala:51) at scala.tools.nsc.interpreter.ExprTyper$class.parse(ExprTyper.scala:42) at scala.tools.nsc.interpreter.IMain$exprTyper$.parse(IMain.scala:1074) at scala.tools.nsc.interpreter.IMain.parse(IMain.scala:1078) at scala.tools.nsc.interpreter.IMain$$anonfun$showCodeIfDebugging$1.apply(IMain.scala:1168) at scala.tools.nsc.interpreter.IMain$$anonfun$showCodeIfDebugging$1.apply(IMain.scala:1168) at scala.tools.nsc.interpreter.IMain.beSilentDuring(IMain.scala:238) at scala.tools.nsc.interpreter.IMain.showCodeIfDebugging(IMain.scala:1168) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.scala:800) at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:761) at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:618) at scala.tools.nsc.interpreter.IMain.bind(IMain.scala:661) at scala.tools.nsc.interpreter.IMain$$anonfun$quietBind$1.apply(IMain.scala:660) at scala.tools.nsc.interpreter.IMain$$anonfun$quietBind$1.apply(IMain.scala:660) at scala.tools.nsc.interpreter.IMain.beQuietDuring(IMain.scala:232) at scala.tools.nsc.interpreter.IMain.quietBind(IMain.scala:660) at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$apply$mcZ$sp$2.apply$mcV$sp(ILoop.scala:853) at scala.tools.nsc.interpreter.ILoopInit$class.runThunks(ILoopInit.scala:122) at scala.tools.nsc.interpreter.ILoop.runThunks(ILoop.scala:42) at scala.tools.nsc.interpreter.ILoopInit$class.postInitialization(ILoopInit.scala:95) at scala.tools.nsc.interpreter.ILoop.postInitialization(ILoop.scala:42) at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply$mcV$sp(ILoopInit.scala:63) at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply(ILoopInit.scala:60) at scala.tools.nsc.interpreter.ILoopInit$$anonfun$createAsyncListener$1.apply(ILoopInit.scala:60) at scala.tools.nsc.io.package$$anon$3.call(package.scala:40) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
内容的提问来源于stack exchange,提问作者Andi0905
相关产品推荐
相关产品推荐

