6

使用 sbt 开发我几乎不使用~run命令,比如 sbt 拾取我的代码更改。这很舒服。

现在我要玩一下akka。当 ctrl+D 停止应用程序并且动态拾取代码时,有什么方法可以恢复默认 sbt 的行为?

这是示例应用程序:

object Main extends App {
  println("Starting actors...")
  val system = ActorSystem("MySystem")
  val myActor = system.actorOf(Props[Actors.MyActor], name = "myActor")
  myActor ! "test"
  // system.shutdown()
}

object Actors {
  class MyActor extends Actor {
  val log = Logging(context.system, this)
  def receive = {
    case "test" => log.info("received test")
    case _      => log.info("received something else")
  }
}

}

在这种情况下run~run命令既不会被 ctrl+D 中断,也不会在更改时重新加载代码。只有 ctrl+C 才能停止整个 sbt。据我了解,播放框架有一些解决方案,因为它看起来像在~run模式下停止 ctrl+D 上的演员系统

4

1 回答 1

4

你可以试试JRebel。您可以获得Scala 开发的免费许可证。非常适合我,尤其是与 sbt 一起使用。Sbt 编译类,使用 JRebel 运行的 Scala 应用程序在运行的应用程序中动态加载新编译的类,无需重新启动。

我的 build.sbt 有以下条目:

javaOptions ++=Seq("-javaagent:/path/to/jrebel.jar","-Drebel.log=true","-Drebel.log.file=/path/to/jrebel.log")

fork := true

我有两个 sbt 实例正在运行。一个运行程序,另一个在检测到更改时编译所有类(~compile)。

于 2013-06-23T18:15:04.180 回答