如何用akka和sbt开发?

时间:2013-06-23 07:18:26

标签: scala sbt akka

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

现在我要和akka玩一下。有没有办法恢复默认的sbt的行为,当ctrl + D停止应用程序,并且代码被动起来?

以下是示例应用:

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。据我所知,Play框架有一些解决方案可以做到这一点,因为它看起来像是在~run模式下在ctrl + D上停止actor系统

1 个答案:

答案 0 :(得分:4)

您可以尝试JRebel。你可以获得free license for Scala development。为我工作非常好,特别是与sbt一起。 Sbt编译类,运行Scala应用程序和JRebel在运行的应用程序中即时加载新编译的类,而不重新启动。

我的build.sbt包含以下条目:

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

fork := true

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