如何在一个简单的构建工具项目中调用scala解释器?

如何在一个简单的构建工具项目中调用scala解释器?,scala,interpreter,sbt,Scala,Interpreter,Sbt,我的scala程序正在使用scala.tools.nsc.interpreter.IMain中的编译器接口。当我使用scalac编译时,一切都按预期进行。但当我使用sbt编译时,它仍然会编译,但在执行时,它会在从IMain实例调用解释方法时抛出以下错误消息: Failed to initialize compiler: object scala not found. ** Note that as of 2.8 scala does not assume use of the java clas

我的scala程序正在使用scala.tools.nsc.interpreter.IMain中的编译器接口。当我使用scalac编译时,一切都按预期进行。但当我使用sbt编译时,它仍然会编译,但在执行时,它会在从IMain实例调用解释方法时抛出以下错误消息:

Failed to initialize compiler: object scala not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
如果在IMain实例上使用settings.usejavacp.value=true,则会出现以下异常:

java.lang.Error: typeConstructor inapplicable for <none>
这里怎么了?我如何在一个简单的构建工具项目中使用解释器


我正在使用Scala 2.9.0和简单构建工具0.7.7,请看SBT维基:

有一个条目是关于让解释器运行的

sbt console // Starts a Scala interpreter
以下是新的常见问题解答(以前的答案已过时)

您还可以找到最新版本的常见问题解答。

请注意,
sbt console quick
加载没有依赖项的控制台。

在较新的sbt版本(0.12及更新版本)中,以下内容应足够:

fork in run := true

你跑步时用叉子吗?如果不是,那就先试试。看,谢谢,这几乎成功了。我在项目定义中添加了
override def fork=forkRun
。解释器可以运行简单的代码,但不能实例化项目中定义的类。我可以为fork添加一个工作目录。但是我应该选择哪一个呢?在尝试了它正在使用的一些路径之后:
override def fork=forkRun(新文件(“target/scala_2.9.0/classes”)
这不是一种糟糕的解决方法吗?我也遇到了这个问题。正如您所发现的,问题在于分叉作业对项目类路径一无所知。更普遍的问题是嵌入式Scala解释器不一定继承父Scala进程的类路径。我使用的解决方法是创建一个SBT任务,该任务将所有类路径元素(target/、lib_managed/)放入Java类路径系统属性中;然后,当我启动一个解释器时,我使用
usejavacp
选项。另请参见以下答案:最后,在迁移到sbt 0.10后,它按照常见问题解答中的说明工作。非常感谢。
fork in run := true