2011-08-25 14 views
12

मेरा प्रश्न एसबीटी 0.10.1 द्वारा प्रबंधित एक प्रोजेक्ट में चल रहे किसी एप्लिकेशन को चलाने के बारे में है और इसलिए इसके स्वचालित निर्भरता प्रबंधन (चलाने के लिए उपयुक्त क्लासपाथ डाउनलोड करने और सेट करने) पर निर्भर करता है।एसबीटी के बिना एसबीटी-प्रबंधित अनुप्रयोग प्रोजेक्ट कैसे चलाएं?

स्वत: निर्भरता प्रबंधन का उपयोग करते समय, यह प्रतीत होता है कि एप्लिकेशन चलाने का एकमात्र तरीका एसबीटी स्वयं का उपयोग कर रहा है क्योंकि यह जानता है कि क्लासपाथ (आईवी 2 की मदद से) कैसे सेट अप करें।

मैं बिना एसबीटी के आवेदन कैसे चला सकता हूं?

उत्तर

11

तुम भी उपयोग कर सकते हैं typesafe के xsbt-स्टार्ट-पटकथा प्लगइन (संपादित करें: अब sbt-start-script) सही वर्ग पथ के साथ एक खोल स्क्रिप्ट उत्पन्न करने के लिए:

इस प्लगइन आप एक स्क्रिप्ट उत्पन्न करने के लिए अनुमति देता है target/start प्रोजेक्ट के लिए। स्क्रिप्ट परियोजना "इन-प्लेस" चलाएगी (पहले पैकेज बनाने के लिए के बिना)।

target/start स्क्रिप्ट sbt run के समान है लेकिन यह एसबीटी पर पर भरोसा नहीं करता है। sbt run उत्पादन के उपयोग के लिए अनुशंसित नहीं है क्योंकि यह एसबीटी को स्वयं स्मृति में रखता है। target/start उत्पादन में ऐप चलाने का इरादा है।

प्लगइन एक कार्य start-script जोड़ता है जो target/start उत्पन्न करता है। यह stage कार्य भी जोड़ता है, start-script कार्य के लिए उपनाम।

स्कैला ऐप्स चलाने के लिए Heroku uses यह है।

+0

यही वह है जो मैं अब उपयोग कर रहा हूं - बहुत अच्छा काम करता है। – Thakur

+0

हैलो बेन, शायद आपके पास [इस सवाल] के लिए एक संकेत है (http://stackoverflow.com/questions/23607291/run-a-sbt-created-app-without-sbt)? 'एसबीटी-स्टार्ट-स्क्रिप्ट' का एक पूर्ण उदाहरण वास्तव में स्वागत किया जाएगा। –

+0

क्या यह अभी भी जाने का तरीका है? बस उत्सुक.. – alapeno

3

मैं का उपयोग किया है retronym के sbt-onejar plugin निष्पादन योग्य जार बनाने के लिए सभी निर्भरता के साथ शामिल (Maven के लिए Assembly plugin की तरह ज्यादा)। यह बहुत ही सरल और अच्छी तरह से प्रलेखित है।

+0

+1 पुनर्नवीनीकरण प्लगइन मैंने सुझाए गए से बेहतर दिखता है, क्योंकि यह निर्भरताओं को अनपैक नहीं करता है –

2

यदि आप अपने सभी एप्लिकेशन और अपनी निर्भरताओं वाले 'वसा' जार बनाना चाहते हैं, तो आप sbt-assembly plugin का उपयोग कर सकते हैं। फिर आप बिना किसी एसबीटी के मानक jar के रूप में अपना आवेदन चला सकते हैं।

1

आप ऐप लॉन्च करने के लिए फ़ाइल बनाने के लिए भी एक कार्य बना सकते हैं। @Kipton Barros How do I run an sbt main class from the shell as normal command-line program? में इस पोस्ट की गई:

val MkUnixlauncher = config("mkunixlauncher") extend(Compile) 
    val mkunixlauncher = TaskKey[Unit]("mkunixlauncher") 
    val mkunixlauncherTask = mkunixlauncher <<= (target, fullClasspath in Runtime) map { (target, cp) => 
    def writeFile(file: File, str: String) { 
     val writer = new PrintWriter(file) 
     writer.println(str) 
     writer.close() 
    } 
    val cpString = cp.map(_.data).mkString(System.getProperty("path.separator")) 
    val launchString = """ 
CLASSPATH="%s" 
scala -usejavacp -Djava.class.path="${CLASSPATH}" "[email protected]" 
""".format(cpString) 
    val targetFile = (target/"scala-sbt").asFile 
    writeFile(targetFile, launchString) 
    targetFile.setExecutable(true) 
    } 

कि स्केला-एसबीटी अपने लक्ष्य निर्देशिका classpath ठीक से सेट अनुप्रयोग चलाने के लिए है कि में नाम की एक फ़ाइल बनाता है। स्वाद के लिए चिमटा।

+0

यह जो मैं प्राप्त करने के लिए देख रहा था उससे निकटतम आता है। – Thakur

संबंधित मुद्दे