使用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系统
答案 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
)。