【问题标题】:How to call the scala interpreter in a Simple Build Tool project?如何在 Simple Build Tool 项目中调用 scala 解释器?
【发布时间】:2011-09-13 00:39:36
【问题描述】:

我的 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>

我的 SBT 项目定义:

class Project(info: ProjectInfo) extends DefaultProject(info){
    val scalaSwing = "org.scala-lang" % "scala-swing" % "2.9.0"
    val scalaCompiler = "org.scala-lang" % "scala-compiler" % "2.9.0"
}

这里有什么问题?以及如何在简单构建工具项目中使用解释器?

我正在使用 Scala 2.9.0Simple Build Tool 0.7.7

【问题讨论】:

  • 跑步时你会fork吗?如果不先尝试。见code.google.com/p/simple-build-tool/wiki/Forking
  • 谢谢,这几乎成功了。我在项目定义中添加了override def fork = forkRun。解释器可以运行简单的代码,但不能实例化项目中定义的类。我可以为 fork 添加一个工作目录。但是我应该选择哪一个?
  • 在尝试了一些它正在使用的路径之后:override def fork = forkRun(new File("target/scala_2.9.0/classes")) 这不是一种糟糕的解决方法吗?
  • 我也遇到过。正如您所发现的,问题在于分叉作业对项目类路径一无所知。一个更普遍的问题是嵌入式 Scala 解释器不一定继承父 Scala 进程的类路径。我使用的解决方法是创建一个 SBT 任务,将所有类路径元素(target/、lib_managed/ 等)放在 Java 类路径系统属性中;然后,当我启动解释器时,我使用 usejavacp 选项。
  • 另请参阅此答案:stackoverflow.com/questions/4713031/…

标签: scala interpreter sbt


【解决方案1】:
sbt console // Starts a Scala interpreter

这是新的常见问题解答(之前的答案已过时)

http://www.scala-sbt.org/0.12.4/docs/faq.html

您还可以找到最新版本的常见问题解答。
请注意,sbt console-quick 会加载没有依赖项的控制台。

【讨论】:

    【解决方案2】:

    查看 SBT wiki:http://www.scala-sbt.org/0.13/docs/Faq.html#How+do+I+use+the+Scala+interpreter+in+my+code%3F

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

    【讨论】:

    • 最终在迁移到 sbt 0.10 后,它按照常见问题解答中的说明工作。谢谢。
    【解决方案3】:

    在更新的 sbt 版本(0.12 和更新)中,以下内容就足够了:

    fork in run := true
    

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 2011-02-11
      • 2011-02-22
      • 1970-01-01
      • 2011-04-27
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      相关资源
      最近更新 更多