SBT หยุดทำงานโดยไม่ต้องออก


120

คุณจะยุติการรันใน SBT โดยไม่ออกได้อย่างไร?

ฉันพยายาม CTRL + C แต่ออกจาก SBT มีวิธีออกจากแอปพลิเคชันที่กำลังทำงานอยู่ในขณะที่เปิด SBT อยู่หรือไม่?


Ctrl+Dไม่ทำงาน, ไม่เป็นผล.
botchniaque

ฉันคิดว่าCtrl + Dใช้ได้กับ Play framework เท่านั้น
EnverOsmanov

คำตอบ:


44

ในการกำหนดค่าเริ่มต้นการรันของคุณจะเกิดขึ้นใน JVM เดียวกันกับที่ sbt ทำงานอยู่ดังนั้นคุณจึงไม่สามารถฆ่าแยกกันได้อย่างง่ายดาย

หากคุณทำการรันใน JVM แยกต่างหากตามที่อธิบายไว้ในForkingคุณสามารถฆ่า JVM นั้นได้ (โดยวิธีใดก็ได้ที่ระบบปฏิบัติการของคุณเสนอ) โดยไม่กระทบกับ JVM ของ sbt:

fork in run := true

9
ฉันกำลังพยายามทำสิ่งนี้ โดยเฉพาะฉันได้ใช้: stackoverflow.com/questions/3868863/…แต่ sbt ยังคงออกเมื่อฉันทำ CTRL + C ฉันจะฆ่า JVM ที่แยกออกมาได้อย่างไร
dsg

2
ด้วยkillจากบรรทัดคำสั่งหรือในที่ Task Manager (Windows) หรือบังคับให้ออกหรือกิจกรรมการตรวจสอบ (Mac OS X) ฯลฯ
เซทเนื้อเยื่อ

หลังจากการฟอร์คเพื่อฆ่าทุกสิ่งที่จาวายกเว้น sbt ให้รัน:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
ฉันชอบความคิดนี้ แต่ดูเหมือนจะไม่ช่วยอะไร ฉันใช้ sbt 0.13.1 และเพิ่มบรรทัดนี้ลงในไฟล์ build.sbt ของฉัน ..
สงสัย 1ejack

คุณต้องฆ่าrunด้วย CTRL + D
Timofey

82

จาก sbt เวอร์ชัน 0.13.5 คุณสามารถเพิ่มลงใน build.sbt ของคุณได้

cancelable in Global := true

ถูกกำหนดเป็น "เปิดใช้งาน (จริง) หรือปิดใช้งาน (เท็จ) ความสามารถในการขัดจังหวะการดำเนินงานด้วย CTRL + C" ในคำจำกัดความของคีย์

หากคุณใช้ Scala 2.12.7+ คุณสามารถยกเลิกการคอมไพล์ด้วย CTRL + C อ้างอิงhttps://github.com/scala/scala/pull/6479

มีรายงานข้อบกพร่องบางอย่าง:


5

ฉันพบว่าสิ่งต่อไปนี้มีประโยชน์เมื่อฉันควบคุมลูปหลักของแอปพลิเคชันที่เรียกใช้จาก sbt

ฉันบอกให้ sbt แยกเมื่อเรียกใช้แอปพลิเคชัน (ใน build.sbt):

fork in run := true

ฉันยังบอกให้ sbt ส่งต่อ stdin จากเชลล์ sbt ไปยังแอปพลิเคชัน (ใน build.sbt):

connectInput in run := true

สุดท้ายในเธรดหลักของแอปพลิเคชันฉันรอ end-of-file บน stdin จากนั้นปิด JVM:

while (System.in.read() != -1) {}
logger.warn("Received end-of-file on stdin. Exiting")
// optional shutdown code here
System.exit(0)

แน่นอนคุณสามารถใช้เธรดใดก็ได้เพื่ออ่าน stdin และ shutdown ไม่ใช่เฉพาะเธรดหลัก

สุดท้ายเริ่มต้น sbt หรือสลับไปยังโครงการย่อยที่คุณต้องการเรียกใช้เรียกใช้

ตอนนี้เมื่อคุณต้องการหยุดกระบวนการให้ปิด stdin โดยพิมพ์ CTRL-D ใน sbt เชลล์


1

พิจารณาใช้SBT-ปืน เราใช้ใน บริษัท ของเราและมีประโยชน์มาก สำหรับสิ่งที่คุณต้องการสามารถทำได้ด้วย:

reStart

reStop

โดยไม่จำเป็นต้องกำหนดค่าไฟล์ build.sbt

คุณสามารถใช้ปลั๊กอินนี้ได้โดยเพิ่ม:

addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")

ไปยัง project / plugins.sbt. ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.