首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java 11中运行scala repl?

如何在java 11中运行scala repl?
EN

Stack Overflow用户
提问于 2020-10-06 23:43:38
回答 1查看 554关注 0票数 2

我已经在我的ubuntu20.04上安装了java 11;

java版本:

代码语言:javascript
复制
$ java -version
penjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)

scala版本:

代码语言:javascript
复制
$ scala -version
Scala code runner version 2.11.12 -- Copyright 2002-2017, LAMP/EPFL

当我尝试运行scala repl时,我得到了错误:

代码语言:javascript
复制
Welcome to Scala 2.11.12 (OpenJDK 64-Bit Server VM, Java 11.0.8).
Type in expressions for evaluation. Or try :help.
Exception in thread "main" java.lang.NoClassDefFoundError: javax/script/Compilable
    at scala.tools.nsc.interpreter.ILoop.createInterpreter(ILoop.scala:118)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$startup$1$1$$anonfun$apply$1.apply(ILoop.scala:971)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$startup$1$1$$anonfun$apply$1.apply(ILoop.scala:971)

scala>  at scala.tools.nsc.interpreter.ILoop.savingReader(ILoop.scala:96)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$startup$1$1.apply(ILoop.scala:970)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:990)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:891)
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:891)
    at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:891)
    at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:74)
    at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87)
    at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98)
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
[ERROR] Failed to disable litteral next character
java.lang.InterruptedException
    at java.base/java.lang.Object.wait(Native Method)
    at java.base/java.lang.Object.wait(Object.java:328)
    at java.base/java.lang.ProcessImpl.waitFor(ProcessImpl.java:495)
    at jline.internal.TerminalLineSettings.waitAndCapture(TerminalLineSettings.java:339)
    at jline.internal.TerminalLineSettings.exec(TerminalLineSettings.java:311)
    at jline.internal.TerminalLineSettings.stty(TerminalLineSettings.java:282)
    at jline.internal.TerminalLineSettings.undef(TerminalLineSettings.java:158)
    at jline.UnixTerminal.disableLitteralNextCharacter(UnixTerminal.java:194)
    at jline.console.ConsoleReader.readLine(ConsoleReader.java:2450)
    at jline.console.ConsoleReader.readLine(ConsoleReader.java:2373)
    at jline.console.ConsoleReader.readLine(ConsoleReader.java:2361)
    at scala.tools.nsc.interpreter.jline.InteractiveReader.readOneLine(JLineReader.scala:59)
    at scala.tools.nsc.interpreter.InteractiveReader$class.readLine(InteractiveReader.scala:38)
    at scala.tools.nsc.interpreter.jline.InteractiveReader.readLine(JLineReader.scala:27)
    at scala.tools.nsc.interpreter.SplashReader.readLine(InteractiveReader.scala:142)
    at scala.tools.nsc.interpreter.SplashLoop.run(InteractiveReader.scala:71)
    at java.base/java.lang.Thread.run(Thread.java:834)

如果我尝试使用java8 (使用update-alternatives --config java更改版本)运行,它可以工作:

代表:

代码语言:javascript
复制
$ scala
cat: /usr/lib/jvm/java-8-openjdk-amd64/jre/release: Arquivo ou diretório não encontrado
Welcome to Scala 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_265).
Type in expressions for evaluation. Or try :help.

scala> 

我怎样才能让scala repl在java 11上工作?每次在java8和11之间切换时,我还会更改.zshrc文件中的JAVA_HOME

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 02:01:32

根据Version compatibility table,Scala2.11.12应该与JDK11兼容

代码语言:javascript
复制
## Version compatibility table

| JDK version | Minimum Scala versions           | Recommended Scala versions                                 |
|:-----------:|:---------------------------------|:-----------------------------------------------------------|
| 13, 14      | 2.13.2, 2.12.11                  | 2.13.3, 2.12.12                                            |
| 12          | 2.13.1, 2.12.9                   | 2.13.3, 2.12.12                                            |
| 11          | 2.13.0, 2.12.4, 2.11.12          | 2.13.3, 2.12.12, 2.11.12                                   |
| 8           | 2.13.0, 2.12.0, 2.11.0, 2.10.2   | 2.13.3, 2.12.12, 2.11.12, 2.10.7                           |
| 6, 7        | 2.11.0, 2.10.0                   | 2.11.12, 2.10.7                                            |

在我的机器上执行

代码语言:javascript
复制
scala --scala-version 2.11.12 -C--jvm=11

with scala-runners没有给出错误

代码语言:javascript
复制
➜  ~ scala --scala-version 2.11.12 -C--jvm=11
Welcome to Scala 2.11.12 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.

scala> sys.props("java.specification.version")
res0: String = 11

scala> util.Properties.versionString
res1: String = version 2.11.12

scala>

注JDK参数指定由coursier下载的-C--jvm=11版本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64229275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档