SBT'deki bir çalışmayı çıkmadan nasıl sonlandırırsınız?
CTRL + C'yi deniyorum ama SBT'den çıkıyor. SBT'yi açık tutarken yalnızca çalışan uygulamadan çıkmanın bir yolu var mı?
Ctrl + D
sadece Play çerçevesi için çalışıyor.
SBT'deki bir çalışmayı çıkmadan nasıl sonlandırırsınız?
CTRL + C'yi deniyorum ama SBT'den çıkıyor. SBT'yi açık tutarken yalnızca çalışan uygulamadan çıkmanın bir yolu var mı?
Ctrl + D
sadece Play çerçevesi için çalışıyor.
Yanıtlar:
Varsayılan yapılandırmada, çalıştırmalarınız sbt'nin çalıştığı aynı JVM'de gerçekleşir, böylece onları ayrı ayrı kolayca öldüremezsiniz.
Koşunuzu Forking'de açıklandığı gibi ayrı, çatallı bir JVM'de yaparsanız, sbt'nin JVM'sini etkilemeden bu JVM'yi (işletim sisteminizin sunduğu herhangi bir şekilde) öldürebilirsiniz:
fork in run := true
kill
komut satırından veya Görev Yöneticisinden (Windows) veya Çıkmaya Zorla veya Activity Monitor (Mac OS X), vb.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
CTRL + D
Sbt 0.13.5 sürümünden itibaren build.sbt dosyanıza ekleyebilirsiniz
cancelable in Global := true
"CTRL + C ile görev yürütmeyi kesme yeteneğini etkinleştirir (doğru) veya devre dışı bırakır (yanlış)" olarak tanımlanır. içinde Tuşlar tanımı
Scala 2.12.7+ kullanıyorsanız, derlemeyi CTRL + C ile de iptal edebilirsiniz. Referans https://github.com/scala/scala/pull/6479
Bildirilen bazı hatalar var:
Sbt'den çalıştırılan uygulamanın ana döngüsünü kontrol ettiğimde aşağıdakileri yararlı buldum.
Uygulamayı çalıştırırken sbt'ye fork yapmasını söylüyorum (build.sbt'de)
fork in run := true
Ayrıca sbt'ye stdin'i sbt kabuğundan uygulamaya yönlendirmesini söylüyorum (build.sbt'de):
connectInput in run := true
Son olarak, uygulamanın ana iş parçacığında, stdin'de dosya sonunu bekliyorum ve ardından JVM'yi kapatıyorum:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Tabii ki, sadece ana iş parçacığını değil, stdin ve kapatma için herhangi bir iş parçacığı kullanabilirsiniz.
Son olarak, sbt'yi başlatın, isteğe bağlı olarak çalıştırmak istediğiniz alt projeye geçin, çalıştırın.
Şimdi, işlemi durdurmak istediğinizde, sbt kabuğuna CTRL-D yazarak stdinini kapatın.
Sbt-revolver kullanmayı düşünün . Şirketimizde kullanıyoruz ve gerçekten kullanışlıdır. İstediğiniz şey şu şekilde yapılabilir:
reStart
reStop
Build.sbt dosyasını yapılandırmaya gerek kalmadan.
Bu eklentiyi ekleyerek kullanabilirsiniz:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Projenize / plugins.sbt'ye
Ctrl+D
çalışmıyor.