बाहर निकलने के बिना SBT स्टॉप रन


120

आप बाहर निकलने के बिना SBT में रन कैसे समाप्त करते हैं?

मैं CTRL + C की कोशिश कर रहा हूं लेकिन यह SBT से बाहर निकलता है। क्या एसबीटी को खुला रखते हुए केवल रनिंग एप्लिकेशन से बाहर निकलने का कोई तरीका है?


Ctrl+Dकाम नहीं करता।
16

मुझे लगता है कि Ctrl + Dकेवल प्ले फ्रेमवर्क के लिए काम करता है।
एनवरोस्मानोव

जवाबों:


44

डिफ़ॉल्ट कॉन्फ़िगरेशन में, आपके रन उसी JVM में होते हैं जो sbt चल रहा होता है, इसलिए आप उन्हें आसानी से अलग से नहीं मार सकते।

यदि आप फोर्किंग में वर्णित JVM, एक अलग, forked में अपना रन करते हैं , तो आप sbt के JVM को प्रभावित किए बिना उस JVM (किसी भी तरह से आपके ऑपरेटिंग सिस्टम की पेशकश) को मार सकते हैं:

fork in run := true

9
मैं ऐसा करने की कोशिश कर रहा हूं। विशेष रूप से, मैंने लागू किया है: stackoverflow.com/questions/3868863/… लेकिन जब मैं CTRL + C करता हूं तो sbt बाहर निकलता है। मैं सिर्फ कांटे की झाविमो को कैसे मार सकता हूँ?
dsg

2
साथ killकमांड लाइन से, या कार्य प्रबंधक में (विंडोज़), या सेना से बाहर निकलें या गतिविधि मॉनिटर (मैक ओएस एक्स), आदि
सेठ Tisue

फोर्किंग के बाद सब्ट को छोड़कर सब कुछ जावा को मारने के लिए,:kill -9 `ps -h | grep java | grep -v sbt-launch | grep -v grep | awk '{print $1}'`
dsg

1
मैं इस विचार से प्यार करता हूँ, लेकिन यह मदद करने के लिए प्रतीत नहीं होता है। मैं sbt 0.13.1 चला रहा हूँ और इस लाइन को अपनी build.sbt फ़ाइल में जोड़ रहा हूँ ..
171:03 डबल्यूजैक

आपको run
टिमोफेई

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 को फोर्क में बताता हूं (बिल्ड.sbt में):

fork in run := true

मैं sbt को sbt शेल से अनुप्रयोग के आगे फॉरवर्ड (बिल्ड.sbt में) भी बताता हूं:

connectInput in run := true

अंत में, आवेदन के मुख्य सूत्र में, मैं स्टड पर एंड-ऑफ-फ़ाइल की प्रतीक्षा करता हूं और फिर JVM को बंद करता हूं:

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

बेशक, आप स्टडिन और शटडाउन को पढ़ने के लिए किसी भी धागे का उपयोग कर सकते हैं, न कि केवल मुख्य धागा।

अंत में, sbt शुरू करें, वैकल्पिक रूप से उस सबप्रोजेक्ट पर स्विच करें जिसे आप चलाना, चलाना चाहते हैं।

अब, जब आप इस प्रक्रिया को रोकना चाहते हैं, तो sbt शेल में CTRL-D लिखकर इसकी स्टड को बंद करें।


1

एसबीटी-रिवॉल्वर का उपयोग करने पर विचार करें । हम इसे अपनी कंपनी में उपयोग करते हैं और यह वास्तव में उपयोगी है। जो आप पूछ रहे हैं, उसके साथ किया जा सकता है:

reStart

reStop

बिना build.sbt फ़ाइल को कॉन्फ़िगर करने की आवश्यकता है।

आप इस प्लगइन को जोड़कर उपयोग कर सकते हैं:

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

आपके प्रोजेक्ट / plugins.sbt पर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.