在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)
这个问题似乎与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.
Java 8 已被弃用,因此降级到是不能接受的解决方案。
正确的解决方案是将您的 SBT 升级到 0.13.17 或更高版本。
如果您使用的是与 JDK 8 以上不兼容的旧版 Scala,请更新到与 JDK 11 兼容的新版本。JDK 11 是当前的 LTS。
按次要版本划分的版本:
正如其他答案提到的,请确保您还使用与 JDK >8 兼容的构建工具(例如 sbt 大于0.13.17
)。