2013-06-23 20 views
6

sbt ile Geliştirme Ben sbt alma benim kod değişiklikleri demek için ~run komutunu kullanmakta zorlanıyorum. Bu çok rahat.Akka ve sbt ile nasıl geliştirilir?

Şimdi akka ile biraz oynayacağım. Ctrl + D uygulamayı durdurduğunda ve kod anında yakalandığında varsayılan sbt'nin davranışını geri getirmenin herhangi bir yolu var mı?

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 ve ~run komutları Böyle durumda ne de ctrl tarafından kesintiye + D ne de değişime kodunu yeniden:

İşte örnek bir uygulama. Tüm sbt durdurmak için sadece ctrl + C. Anladığım kadarıyla oyun çerçevesi bunu yapmak için bazı çözümlere sahiptir, çünkü ctrl + D'de ~run modu

+2

Bu, sorunuzu yanıtlamıyor, ancak 'main' öğesinin sonuna bir 'readLine' +' shutdown 'eklenmesi yardımcı olabilir. – agilesteel

+0

Evet, basit bir çözüm, ancak çok rahat değil. Neyse, teşekkürler. –

cevap

4

'da aktör sistemini durdurma gibi görünüyor. JRebel'u deneyebilirsiniz. Bir free license for Scala development alabilirsiniz. Özellikle de sbt ile birlikte çok iyi çalıştı. Sbt, sınıfları derler; JRebel ile çalışan Scala uygulaması, yeniden başlatılmadan çalışan uygulamadaki yeni derlenmiş sınıfları anında yükler.

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

fork := true 

Ben çalışan iki sbt örneğini:

Benim build.sbt aşağıdaki girişler var. Biri programı çalıştırır, diğeri ise bir değişiklik tespit edildiğinde tüm sınıfları derler (~compile).