Làm thế nào để bạn kết thúc một cuộc chạy trong SBT mà không thoát ra?
Tôi đang thử CTRL + C nhưng nó thoát khỏi SBT. Có cách nào để chỉ thoát ứng dụng đang chạy trong khi vẫn mở SBT không?
Ctrl + D
chỉ hoạt động cho Play framework.
Làm thế nào để bạn kết thúc một cuộc chạy trong SBT mà không thoát ra?
Tôi đang thử CTRL + C nhưng nó thoát khỏi SBT. Có cách nào để chỉ thoát ứng dụng đang chạy trong khi vẫn mở SBT không?
Ctrl + D
chỉ hoạt động cho Play framework.
Câu trả lời:
Trong cấu hình mặc định, các lần chạy của bạn diễn ra trong cùng một JVM mà sbt đang chạy, vì vậy bạn không thể dễ dàng loại bỏ chúng một cách riêng biệt.
Nếu bạn thực hiện quá trình chạy của mình trong một JVM được phân nhánh riêng biệt, như được mô tả tại Forking , thì bạn có thể loại bỏ JVM đó (bằng bất kỳ phương tiện nào mà hệ điều hành của bạn cung cấp) mà không ảnh hưởng đến JVM của sbt:
fork in run := true
kill
từ dòng lệnh, hoặc trong Task Manager (Windows), hoặc Force Quit hoặc Activity Monitor (Mac OS X) vv
kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
run
bằng CTRL + D
Từ phiên bản sbt 0.13.5, bạn có thể thêm vào build.sbt của mình
cancelable in Global := true
Nó được định nghĩa là "Cho phép (đúng) hoặc vô hiệu hóa (sai) khả năng làm gián đoạn việc thực thi tác vụ bằng CTRL + C." trong định nghĩa Keys
Nếu bạn đang sử dụng Scala 2.12.7+, bạn cũng có thể hủy biên dịch bằng CTRL + C. Tham khảo https://github.com/scala/scala/pull/6479
Có một số lỗi được báo cáo:
Tôi thấy điều sau hữu ích khi tôi có quyền kiểm soát vòng lặp chính của ứng dụng đang được chạy từ sbt.
Tôi yêu cầu sbt fork khi chạy ứng dụng (trong build.sbt):
fork in run := true
Tôi cũng yêu cầu sbt chuyển tiếp stdin từ trình bao sbt đến ứng dụng (trong build.sbt):
connectInput in run := true
Cuối cùng, trong chuỗi chính của ứng dụng, tôi đợi end-of-file trên stdin và sau đó tắt JVM:
while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)
Tất nhiên, bạn có thể sử dụng bất kỳ luồng nào để đọc stdin và tắt máy, không chỉ luồng chính.
Cuối cùng, khởi động sbt, tùy chọn chuyển sang dự án con muốn chạy, chạy.
Bây giờ, khi bạn muốn dừng quá trình, hãy đóng stdin của nó bằng cách gõ CTRL-D trong trình bao sbt.
Cân nhắc sử dụng sbt-Revver . Chúng tôi sử dụng nó trong công ty của chúng tôi và nó thực sự tiện dụng. Đối với những gì bạn đang yêu cầu có thể được thực hiện với:
reStart
reStop
Mà không cần cấu hình tệp build.sbt.
Bạn có thể sử dụng plugin này bằng cách thêm:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
Đối với dự án / plugins.sbt của bạn
Ctrl+D
không hoạt động.