无法初始化编译器:找不到编译器镜像中的对象java.lang.Object

Kev*_*ith 39 ubuntu scala

在Ubuntu 16.04上,我安装了scala:

$ls ~/Binary/scala-2.11.8
bin  doc  lib  man
$grep -A 2 SCALA ~/.bashrc
SCALA=~/Binary/scala-2.11.8
SBT=~/Binary/sbt
export PATH=$PATH:$SCALA/bin:$SBT/bin
Run Code Online (Sandbox Code Playgroud)

随着openjdk8安装,scala打开REPL时失败:

$javac -version
javac 1.8.0_91
$ 
$scala
Welcome to Scala 2.11.8 (OpenJDK 64-Bit Server VM, Java 9-internal).
Type in expressions for evaluation. Or try :help.
scala> 
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 programmatically, settings.usejavacp.value = true.

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 programmatically, settings.usejavacp.value = true.
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

WOP*_*OPR 32

使用Java 8版本的OpenJDK为我解决了这个问题.

sudo update-alternatives --config java
sudo update-alternatives --config javac
Run Code Online (Sandbox Code Playgroud)


Dbz*_*Dbz 9

这个问题似乎与Java 9有关,并且可以通过Java 8解决.

如果您有Java 8和Java 9,并且希望同时保留它们,则可以将环境变量JAVA_HOME设置为Java 8路径.

例如:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home

您将需要替换jdk1.8.0_161.jdk您拥有的JDK版本.

您可以找到以下版本:

ls /Library/Java/JavaVirtualMachines/

设置该环境变量后,可以打开一个新终端并运行java -version以查看版本是否设置正确.

编辑:

可能值得注意的是,即使这是一个Linux问题,我也有Mac.


sil*_*rry 9

Java 8 已被弃用,因此降级到是不能接受的解决方案。

正确的解决方案是将您的 SBT 升级到 0.13.17 或更高版本。

  • 其他 8 个答案中唯一正确的答案,并且零赞成票! (3认同)

cst*_*roe 6

如果您使用的是与 JDK 8 以上不兼容的旧版 Scala,请更新到与 JDK 11 兼容的新版本。JDK 11 是当前的 LTS。

按次要版本划分的版本:

正如其他答案提到的,请确保您还使用与 JDK >8 兼容的构建工具(例如 sbt 大于0.13.17)。


Yas*_*hah 5

安装Java版本“ 1.8.0_144”对我来说解决了这个问题。我以前安装了jdk 1.9。