【发布时间】: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