Bagaimana Anda menghentikan proses di SBT tanpa keluar?
Saya mencoba CTRL + C tetapi keluar dari SBT. Apakah ada cara untuk hanya keluar dari aplikasi yang sedang berjalan sambil tetap membuka SBT?
Ctrl + D
hanya berfungsi untuk kerangka Play.
Bagaimana Anda menghentikan proses di SBT tanpa keluar?
Saya mencoba CTRL + C tetapi keluar dari SBT. Apakah ada cara untuk hanya keluar dari aplikasi yang sedang berjalan sambil tetap membuka SBT?
Ctrl + D
hanya berfungsi untuk kerangka Play.
Jawaban:
Dalam konfigurasi default, proses Anda terjadi di JVM yang sama dengan sbt yang dijalankan, jadi Anda tidak dapat dengan mudah mematikannya secara terpisah.
Jika Anda menjalankan dalam JVM terpisah dan bercabang, seperti yang dijelaskan di Forking , maka Anda dapat menghentikan JVM itu (dengan cara apa pun yang ditawarkan sistem operasi Anda) tanpa memengaruhi JVM sbt:
fork in run := true
kill
dari baris perintah, atau di Task Manager (Windows), atau Force Quit atau Activity Monitor (Mac OS X), dll.
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
dengan CTRL + D
Dari sbt versi 0.13.5 Anda dapat menambahkan ke build.sbt Anda
cancelable in Global := true
Ini didefinisikan sebagai "Mengaktifkan (true) atau menonaktifkan (false) kemampuan untuk mengganggu eksekusi tugas dengan CTRL + C." dalam definisi Keys
Jika Anda menggunakan Scala 2.12.7+, Anda juga dapat membatalkan kompilasi dengan CTRL + C. Referensi https://github.com/scala/scala/pull/6479
Ada beberapa bug yang dilaporkan:
Saya telah menemukan yang berikut berguna ketika saya memiliki kendali atas loop utama aplikasi yang dijalankan dari sbt.
Saya memberi tahu sbt untuk bercabang saat menjalankan aplikasi (di build.sbt):
fork in run := true
Saya juga memberi tahu sbt untuk meneruskan stdin dari shell sbt ke aplikasi (di build.sbt):
connectInput in run := true
Akhirnya, di utas utama aplikasi, saya menunggu akhir file di stdin dan kemudian mematikan JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Tentu saja, Anda dapat menggunakan utas apa pun untuk membaca stdin dan shutdown, bukan hanya utas utama.
Terakhir, mulai sbt, secara opsional beralih ke subproyek yang ingin Anda jalankan, jalankan.
Sekarang, ketika Anda ingin menghentikan proses, tutup stdin dengan mengetik CTRL-D di shell sbt.
Pertimbangkan untuk menggunakan sbt-revolver . Kami menggunakannya di perusahaan kami dan ini sangat berguna. Untuk apa yang Anda minta dapat dilakukan dengan:
reStart
reStop
Tanpa perlu mengkonfigurasi file build.sbt.
Anda dapat menggunakan plugin ini dengan menambahkan:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Ke proyek / plugins.sbt Anda
Ctrl+D
tidak bekerja.