REPL使用IMain,Akka和sbt:让导入工作

时间:2013-01-19 04:36:47

标签: scala sbt interpreter

我正在尝试将交互式shell添加到我的Scala应用程序中。我正在使用以下系统:

      
  • Scala 2.10.0
  •   
  • sbt 0.12.2
  •   
  • Akka 2.1.0
  •   
  • sbt-lwjgl-plugin 3.1.4

以及以下非工作代码:

    import akka.actor.Actor
    import scala.tools.nsc.Settings
    import scala.tools.nsc.interpreter.IMain

    class TestActor extends Actor {
      def receive => {
        case _ => {
          val settings = new Settings
          settings.usejavacp.value = true
          settings embeddedDefaults ActorSystem.getClass.getClassLoader
          val repl = new IMain(settings)
          repl.interpret("import java._")               // working
          repl.interpret("import scala._")              // working
          repl.interpret("import akka._")               // not working
          repl.interpret("import other.java.class.Bar") // not working
        }
      }
    }

Sbt设置为fork := true。我已经尝试了几种设置和类路径配置,但没有找到有效的配置。有人能给我一个解决这个问题的提示/解决方案吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试使用绝对路径重新导入所有类路径?

val settings = new Settings
settings.usejavacp.value = true

val classLoader = Thread.currentThread.getContextClassLoader

classLoader.asInstanceOf[URLClassLoader].getURLs.map(url => new File(url.toURI).getAbsolutePath).foreach {
  jarPath =>
    println(s"adding into Scala SDK classpath : ${jarPath}")

    settings.bootclasspath.append(jarPath)
    settings.classpath.append(jarPath)
}