我正在尝试在Scala程序中间调用Scala解释器。
我看到了这个非常有趣的问题,但它似乎在Eclipse(3.5.2 + Scala插件)中无法正常工作。
I get the following error:
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:这是我尝试让其工作的简化版本:
import scala.tools.nsc.Interpreter._ object ScalaShell { def main(args: Array[String]) { break(Nil) } }
java -classpath ...
而不是scala -classpath ...
启动进程。尝试将scala-compiler.jar
添加到类路径中,看看是否有效。 - Jesperscala-compiler.jar
添加到 Eclipse 项目的类路径中了吗?这样应该可以解决问题(虽然我自己没有尝试过),即使程序是用java
而不是scala
启动的。 - Jesperscala
,你会发现它只是一个调用java
的shell脚本。因此唯一的区别在于类路径中包含了什么内容。 - Daniel C. Sobral