SBT, çıkmadan çalışmayı durdur


120

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çalışmıyor.
botchniaque

Bence Ctrl + Dsadece Play çerçevesi için çalışıyor.
EnverOsmanov

Yanıtlar:


44

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

9
Bunu yapmaya çalışıyorum Özellikle, şunu uyguladım: stackoverflow.com/questions/3868863/… ancak CTRL + C yaptığımda sbt hala çıkıyor. Sadece çatallı JVM'yi nasıl öldürebilirim?
dsg

2
ile killkomut satırından veya Görev Yöneticisinden (Windows) veya Çıkmaya Zorla veya Activity Monitor (Mac OS X), vb.
Seth Tisue,

Çatalladıktan sonra, sbt dışındaki her şeyi javayı öldürmek için şunu çalıştırın:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
Bu fikri seviyorum ama yardımcı olmuyor. Sbt 0.13.1 çalıştırıyorum ve bu satırı build.sbt dosyama ekliyorum ..
doub1ejack

runCTRL + D
Timofey

82

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:


5

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.


1

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.