java - scala EPFL 线程 "main"java.lang.NoClassDefFoundError : javax/script/Compilable 中出现异常

标签 java scala debian

我对 Scala 和 JVM 编程完全是菜鸟。我最近加入的团队使用 scala 来构建在 Spark 上运行的程序。工作中的堆栈稳定且实用,但其复杂性与我在家的需求不符:仅仅需要一个功能性 scala shell 来更熟悉该语言,尝试一些事情,在添加任何“环境复杂性”之前先掌握语法。环境复杂性

[注意]我只是想要一些与this documentation同样的愚蠢的东西。 (所以,请不要根据编译器、sbt、IDE 等来回答)

david@ripper$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
david@ripper$ scala -version 
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

这是我在吃 shell 午餐时得到的结果

david@ripper$ scala 
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.apply$mcZ$sp(ILoop.scala:911)
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:909)
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)

这似乎是一个经典问题,我首先认为与我的系统上安装了 Oracle java 11 这一事实有关。但是,我认为我将 openjdk8 设为默认的系统范围 JRE,如下所示:

update-alternatives --config java
Il existe 2 choix pour l'alternative java (qui fournit /usr/bin/java).
Sélection   Chemin Priorité  État
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-oracle/bin/java             1091      mode automatique
  1            /usr/lib/jvm/java-11-oracle/bin/java             1091      mode manuel
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      mode manuel

我错过了什么。 scala 不是使用 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 吗?我正在使用 Debian 9 中提供的默认 scala 包

最佳答案

事实证明,update-alternatives --config java 并没有更改用户 PATH 的 JAVA_HOME(它仍然指向 java11)。看来 scala-shell 并不使用系统的默认 JRE,而是使用 .bashrc(在我的例子中为 .zshrc)指向的 JRE。

关于java - scala EPFL 线程 "main"java.lang.NoClassDefFoundError : javax/script/Compilable 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55207408/

相关文章:

linux - foob​​ar : command not found when running bash script

git - 将当前 git 存储库转换为与 git-buildpackage 兼容的存储库

java - 使用 Spring validator 验证嵌套对象列表?

scala - 如何计算DataFrame列的2的幂

c# - 在 Raspberry Pi 上使用单声道编译 C# Windows 窗体应用程序时出错

Eclipse 靛蓝 : how do I uninstall a plugin if the Help -> About Eclipse SDK dialog won't display?

java - 在 Scala 中迭代 Java 集合

java - Spring Boot 应用程序在使用 Java 10 的 Docker 中启动时卡住

java - Java 发明了接口(interface)吗?

ProcessBuilder 调用的 Java 进程永远 hibernate