2013-06-23 22 views
6

Phát triển bằng sbt Tôi hầu như không sử dụng lệnh ~run, để nói sbt đón mã của tôi thay đổi. Điều này rất thoải mái.Làm thế nào để phát triển với akka và sbt?

Bây giờ tôi sẽ phát một chút với akka. Có cách nào để mang lại hành vi mặc định của sbt, khi ctrl + D dừng ứng dụng, và mã được chọn khi đang bay?

Đây là ứng dụng mẫu:

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") 
    } 
} 

} 

Trong trường hợp này run~run lệnh cũng không làm gián đoạn bởi ctrl + D cũng không tải lại mã trên thay đổi. Chỉ ctrl + C để dừng toàn bộ sbt. Như tôi hiểu khung chơi có một số giải pháp để làm điều này, vì có vẻ như nó dừng hệ thống diễn viên trên ctrl + D ở chế độ ~run

+2

Điều này không trả lời câu hỏi của bạn, nhưng việc thêm 'readLine' +' shutdown' vào cuối 'main' có thể hữu ích. – agilesteel

+0

Có, loại giải pháp đơn giản, nhưng không quá thoải mái. Dù sao thì cũng cám ơn bạn. –

Trả lời

4

Bạn có thể thử JRebel. Bạn có thể nhận được free license for Scala development. Làm việc cho tôi rất tốt, đặc biệt là cùng với sbt. Sbt biên dịch các lớp, ứng dụng Scala đang chạy với JRebel tải các lớp mới được biên dịch nhanh chóng trong ứng dụng đang chạy mà không cần khởi động lại.

build.sbt tôi có các mục sau:

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

fork := true 

Tôi có hai trường hợp SBT chạy. Một chương trình chạy chương trình, chương trình còn lại biên dịch tất cả các lớp khi phát hiện thay đổi (~compile).