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

Posted

技术标签:

【中文标题】无法初始化编译器:找不到编译器镜像中的对象 java.lang.Object【英文标题】:Failed to initialize compiler: object java.lang.Object in compiler mirror not found 【发布时间】:2016-11-30 20:52:22 【问题描述】:

在 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

安装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.

我该如何解决?

【问题讨论】:

你机器的JAVA_HOME值是多少? 未设置。但是,我通过 sudo update-alternatives --config javac 修复它以使用 openjdk-8 而不是 /usr/lib/jvm/java-9-openjdk-amd64/bin/java 设置 JAVA_HOME 是否消除了错误? 在我的机器上设置 JAVA_HOME 删除了错误 我遇到了同样的问题,将 java 版本更改为 8 就成功了。 【参考方案1】:

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

sudo update-alternatives --config java
sudo update-alternatives --config javac

【讨论】:

使用 brew 在 osx 上安装特定的 java 版本:lonecpluspluscoder.com/2017/10/08/… 非常有帮助的答案! 这是一个 linux 问题,但如果您在 Mac 上遇到此问题,请按照这些说明在您的系统中安装 Java8 (***.com/questions/24342886/…),并相应地设置您的新 JAVA_HOME(请参阅@Dbz在下面回答)。 我使用的是 Java 10,降级到 OpenJDK 版本 8 确实有效!但是,我还必须将 JAVA_HOME 环境变量更新到正确的文件夹才能工作,以防万一有人也需要这样做。 在 Ubuntu 上使用 Java 8 版本对我有用,无需任何进一步的更改。很好的答案【参考方案2】:

Java 8 已被弃用,因此降级到 is 绝不能成为可接受的解决方案。

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

【讨论】:

其他 8 个答案中唯一正确的答案,零赞!【参考方案3】:

这个问题似乎与 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 以查看版本设置是否正确。

编辑:

值得注意的是,我有一台 Mac,尽管这是一个 linux 问题。

【讨论】:

【参考方案4】:

安装 java 版本“1.8.0_144”为我解决了这个问题。我之前安装过 jdk 1.9。

【讨论】:

【参考方案5】:

如果您使用的是与 JDK 8 以上不兼容的旧版 Scala,请update to a newer version that's compatible with JDK 11。 JDK 11 是当前的 LTS。

次要版本:

对于 2.11.x,这意味着 2.11.12 或 later 对于 2.12.x,这意味着 2.12.10 或 later 对于 2.13.x,这意味着 2.13.1 或 later

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

【讨论】:

【参考方案6】:

安装 Java 8 解决了这个问题。

我下载了 java 8 并将其提取到以下位置:/usr/lib/jvm/jdk1.8.0_172

完成此操作后,将 JAVA_HOME 路径更新为相同:/usr/lib/jvm/jdk1.8.0_172

这将解决问题。

【讨论】:

【参考方案7】:

使用此 java 版本“1.8.0_144”

卸载java和apache-spark

安装java,安装apache-spark

【讨论】:

【参考方案8】:

我遇到了同样的问题。卸载 Java 9

sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9.jdk/
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane

参考:https://gist.github.com/schnell18/bcb9833f725be22f6acd01f94b486392

安装 Java 8。

现在一切似乎都很好。

顺便说一句:这是为 mac 准备的。可能对你有用。

【讨论】:

【参考方案9】:

我在同一位置有我的 jdk 的 zip。取下拉链对我有用。

【讨论】:

以上是关于无法初始化编译器:找不到编译器镜像中的对象 java.lang.Object的主要内容,如果未能解决你的问题,请参考以下文章

linux下java class 找不到或无法加载主类

gcc找不到静态库中的函数

Eclipse 无法编译,提示“错误: 找不到或无法加载主类”

Eclipse 无法编译,提示“错误: 找不到或无法加载主类”

找不到模块:无法解析“./pages”编译失败

错误:找不到字段的设置器。 - java.util.ArrayList 中的大小 - Room 中的嵌入式 ArrayList 无法编译