【问题标题】:Drop into Scala interpreter during execution of Scala program在 Scala 程序执行期间放入 Scala 解释器
【发布时间】:2011-03-23 08:58:21
【问题描述】:

我正在尝试在我的 Scala 程序中间插入 Scala 解释器。 我见过this very interesting question,但它似乎在 Eclipse(3.5.2 + Scala 插件)中不起作用。

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/io/LowPriorityCodecImplicits
    at scala.tools.nsc.Interpreter$.breakIf(Interpreter.scala:1265)
    at userInterface.CommandInterpreter$$anonfun$main$1.apply$mcVI$sp(CommandInterpreter.scala:102)
    at scala.collection.immutable.Range$ByOne$class.foreach$mVc$sp(Range.scala:275)
    at scala.collection.immutable.Range$$anon$1.foreach$mVc$sp(Range.scala:267)
    at userInterface.CommandInterpreter$.main(CommandInterpreter.scala:101)
    at userInterface.CommandInterpreter.main(CommandInterpreter.scala)
Caused by: java.lang.ClassNotFoundException: scala.io.LowPriorityCodecImplicits
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 6 more

如果我用 scalac 编译它并在我的终端上运行它,那么同样的代码可以工作。 有什么问题?与 Eclipse 有什么关系?

谢谢!

PS:这是我正在尝试制作的简化版本

导入 scala.tools.nsc.Interpreter._ 对象 ScalaShell { def main(args: Array[String]) { 休息(无) } }

【问题讨论】:

  • 我不能让它与 Eclipse 一起工作,但如果我使用“scala”命令启动可执行文件,它确实可以工作......就像这样:“scala packageName.classWithMain”例如:“scala userInterface.controller" 替换你自己的包名和类!问题是 Eclipse 使用“java”可执行文件调用程序,而不是“scala”。我不知道如何修改这种行为。
  • 问题可能与 cmets 中提到的其他问题相同:Eclipse 使用 java -classpath ... 而不是 scala -classpath ... 启动进程。尝试将scala-compiler.jar 添加到类路径中,看看它是否有效。
  • 我试过了,但 Eclipse 使用的命令仍然是 java,而不是 scala(我可以在 Debugger 视图中看到它)。到目前为止的解决方案是使用命令行。
  • @stephan 您是否尝试将scala-compiler.jar 添加到Eclipse 项目的类路径中?然后它应该可以工作(尽管我自己没有尝试过),即使程序以 java 而不是 scala 启动。
  • @stephan 实际上,如果您使用编辑器打开scala,您会看到它只是一个调用java 的shell 脚本。所以唯一的区别是类路径中的内容。

标签: eclipse scala eclipse-plugin interpreter


【解决方案1】:

您没有提及您正在使用的 Scala 命令行工具或 Scala IDE for Eclipse 的版本,但我会伸出脖子猜测命令行工具是 2.8.0,而Eclipse 工具是 2.7.x,或者您的 Eclipse 项目类路径中某处有一个 2.7.x scala-library .jar(可能通过 Maven 依赖项引入)。

如果是这种情况,那么原始安装 2.8.0.final 的 Eclipse 工具应该可以为您解决问题。如果没有,那么您可能在 SDT 中发现了一个错误,您应该报告它here

【讨论】:

  • 是的,它是 Scala 2.8(据我所知,仅在 2.8 中支持 break(Nil))。我不确定这是一个错误,因为编译后的二进制文件在命令行中工作正常:它们只需要使用“scala”命令启动,而不是使用“java”(就像 Eclipse 那样)。
  • 您在 Eclipse 中进行什么样的启动?您是否使用 Scala IDE for Eclipse 作为 Scala 应用程序运行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多