2012-07-10 9 views
97

मैं इस पर कोठरी से बाहर निकल रहा हूं! मैं एसबीटी समझ में नहीं आता। वहां, मैंने कहा, अब कृपया मेरी मदद करें।क्या कोई एसबीटी का उपयोग करने का सही तरीका बता सकता है?

सभी सड़कों रोम करने के लिए नेतृत्व, और कहा कि एसबीटी लिए एक ही है: आदि, वहाँ है SBT, SBT Launcher, SBT-extrasSBT के साथ आरंभ करने के लिए, और फिर वहाँ शामिल हैं और खजाने पर फैसला करने के लिए विभिन्न तरीके हैं। क्या कोई 'सर्वश्रेष्ठ' तरीका है?

मैं पूछ रहा हूं क्योंकि कभी-कभी मुझे थोड़ा खो जाता है। एसबीटी दस्तावेज बहुत गहन और पूर्ण है, लेकिन मुझे यह नहीं पता कि build.sbt या project/build.properties या project/Build.scala या project/plugins.sbt का उपयोग कब करना है।

फिर यह मजेदार हो जाता है, Scala-IDE और SBT - उन्हें एक साथ उपयोग करने का सही तरीका क्या है? पहले क्या होता है, चिकन या अंडा?

सबसे महत्वपूर्ण बात यह है कि, आपको अपनी परियोजना में शामिल करने के लिए सही भंडार और संस्करण कैसे मिलते हैं? क्या मैं सिर्फ एक मैकेटेट खींचता हूं और अपना रास्ता आगे बढ़ाना शुरू करता हूं? मुझे अक्सर ऐसी परियोजनाएं मिलती हैं जिनमें सबकुछ और रसोई सिंक शामिल होता है, और फिर मुझे एहसास होता है - मैं अकेला नहीं हूं जो थोड़ा खो जाता है।

एक साधारण उदाहरण के रूप में, अभी, मैं एक ब्रांड नई परियोजना शुरू कर रहा हूं। मैं SLICK और Scala की नवीनतम सुविधाओं का उपयोग करना चाहता हूं और इसके लिए शायद एसबीटी के नवीनतम संस्करण की आवश्यकता होगी। शुरू करने के लिए साइन पॉइंट क्या है, और क्यों? मुझे किस फाइल में इसे परिभाषित करना चाहिए और इसे कैसे दिखाना चाहिए? मुझे पता है कि मैं यह काम कर सकता हूं, लेकिन मुझे वास्तव में एक विशेषज्ञ राय चाहिए कि सब कुछ कहाँ जाना चाहिए (इसे क्यों जाना चाहिए बोनस होगा)।

मैं अब एक वर्ष से अधिक समय के लिए छोटी परियोजनाओं के लिए SBT का उपयोग कर रहा हूं। मैंने SBT और फिर SBT Extras का उपयोग किया (क्योंकि यह कुछ सिरदर्द जादुई रूप से गायब हो गया), लेकिन मुझे यकीन नहीं है कि मुझे एक या दूसरे का उपयोग क्यों करना चाहिए। मैं समझने के लिए थोड़ा निराश हो रहा हूं कि चीजें एक साथ कैसे फिट होती हैं (SBT और भंडार), और लगता है कि यह अगले व्यक्ति को इस तरह से बहुत कठिनाई से बचाएगा यदि इसे मानव शर्तों में समझाया जा सके।

+2

वास्तव में क्या आप "वहाँ है स्काला आईडीई और एसबीटी" के साथ क्या मतलब है? आप एसबीटी के साथ अपनी परियोजना को परिभाषित करते हैं और एसबीटी एक आदर्श उत्पन्न कर सकता है (ग्रहण oder intellij) परियोजना। तो एसबीटी पहले आता है ... – Jan

+2

@ जैन मैंने उल्लेख किया कि स्कैला-आईडीई बिल्ड प्रबंधक के रूप में एसबीटी का उपयोग करता है। Http://www.assembla.com/spaces/scala-ide/wiki/SBT-based_build_manager देखें और उस पोस्ट में नीचे जाएं जो उनका उल्लेख है "आपकी एसबीटी परियोजना फ़ाइल को परिभाषित करने की आवश्यकता नहीं है।" जो मुझे उलझन में मिला। – Jack

+0

ठीक है। जैसा कि मैं आमतौर पर स्केल को संपादित करने के लिए इंटेलिज (या उत्कृष्ट) का उपयोग करता हूं, मुझे यह नहीं पता था। मुझे लगता है कि निर्माता अपनी एसबीटी कॉन्फ़िगरेशन उत्पन्न करता है? – Jan

उत्तर

28

सबसे महत्वपूर्ण बात यह है कि, आपको अपनी परियोजना में शामिल करने के लिए सही भंडार और संस्करण कैसे मिलते हैं? क्या मैं सिर्फ एक मैकेटेट खींचता हूं और अपना रास्ता आगे बढ़ाना शुरू करता हूं? मैं अक्सर परियोजनाओं है कि सब कुछ और पानी के नल

स्काला आधारित निर्भरता के लिए भी विचार, मैं क्या लेखकों की सिफारिश के साथ जाना होगा। उदाहरण के लिए:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0-RC1") 

जावा आधारित निर्भरता के लिए, मैं http://mvnrepository.com/ का उपयोग क्या वहाँ बाहर है देखने के लिए, फिर पर क्लिक करें:

libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4" 

या https://github.com/typesafehub/sbteclipse/ जहां जोड़ने के निर्देश दिया गया है: http://code.google.com/p/scalaz/#SBT उपयोग करने के लिए इंगित करता है एसबीटी टैब

libraryDependencies += "net.sf.opencsv" % "opencsv" % "2.3" 

फिर machette बाहर निकालते हैं और अपने तरीके से आगे हैकिंग शुरू: उदाहरण के लिए http://mvnrepository.com/artifact/net.sf.opencsv/opencsv/2.3 उपयोग करने के लिए इंगित करता है। यदि आप भाग्यशाली हैं तो आप जार का उपयोग नहीं करते हैं जो कि कुछ जारों पर निर्भर करता है लेकिन असंगत संस्करणों के साथ। जावा पारिस्थितिक तंत्र को देखते हुए, आप अक्सर सबकुछ और रसोई सिंक समेत समाप्त होते हैं और निर्भरताओं को खत्म करने के लिए कुछ प्रयास करते हैं या सुनिश्चित करते हैं कि आप आवश्यक निर्भरताओं को याद नहीं कर रहे हैं।

एक साधारण उदाहरण के रूप में, अभी, मैं एक नई नई परियोजना शुरू कर रहा हूं। मैं स्लिम और स्कैला की नवीनतम सुविधाओं का उपयोग करना चाहता हूं और इसके लिए शायद एसबीटी के नवीनतम संस्करण की आवश्यकता होगी। शुरू करने के लिए सौहार्दपूर्ण बिंदु क्या है, और क्यों?

मुझे लगता है कि साइन पॉइंट build immunity to sbt gradually है।

सुनिश्चित करें कि आप समझते हैं:

  1. scopes सेटिंग्स का प्रारूप {<build-uri>}<project-id>/config:key(for task-key)
  2. 3 जायके (SettingKey, TaskKey, InputKey) - http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def

में खंड "टास्क कुंजी" कहा जाता है पढ़ उन 4 पृष्ठों को हर समय खुले रखें ताकि आप कूद सकें और विभिन्न परिभाषाओं और उदाहरणों को देख सकें:

  1. http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def
  2. http://www.scala-sbt.org/release/docs/Detailed-Topics/index
  3. http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html
  4. http://harrah.github.com/xsbt/latest/sxr/Defaults.scala.html

show और inspectऔर टैब पूरा होने का अधिकतम उपयोग करना सेटिंग्स, उनकी निर्भरता, परिभाषाओं की वास्तविक मान से परिचित कराने के और संबंधित सेटिंग्स।मुझे विश्वास नहीं है कि inspect का उपयोग करके आपके द्वारा खोजे गए रिश्तों को कहीं भी दस्तावेज किया गया है। यदि कोई बेहतर तरीका है तो मैं इसके बारे में जानना चाहता हूं।

24

तरह से मैं एसबीटी का उपयोग करें:

  1. उपयोग sbt-extras - बस खोल स्क्रिप्ट हो और जड़ की आप परियोजना
  2. की स्थापना के लिए एक MyProject.scala फ़ाइल के साथ एक परियोजना फ़ोल्डर बनाएँ में जोड़ने एसबीटी। मैं इसे build.sbt दृष्टिकोण पर अधिक पसंद करता हूं - इसका स्केल और अधिक लचीला
  3. कोई प्रोजेक्ट/plugins.sbt फ़ाइल बनाएं और अपने आईडीई के लिए उपयुक्त प्लगइन जोड़ें। या तो sbt-eclipse, sbt-idea या ensime-sbt-cmd ताकि आप ग्रहण, intellij या ensime के लिए प्रोजेक्ट फ़ाइलों को उत्पन्न कर सकें।
  4. लॉन्च अपने आईडीई के लिए अपनी परियोजना के रूट में एसबीटी और परियोजना फ़ाइलें उत्पन्न
  5. लाभ

मैं आईडीई परियोजना फाइलों में जाँच के बाद से वे एसबीटी द्वारा उत्पन्न कर रहे परेशान नहीं है, लेकिन वहाँ हो सकता है ऐसे कारण बनें जिन्हें आप करना चाहते हैं।

आप इस here की तरह स्थापित एक उदाहरण देख सकते हैं।

+0

अच्छे उत्तर के लिए धन्यवाद। मैंने दूसरे जवाब को स्वीकार कर लिया, क्योंकि इसमें अधिक जमीन शामिल है, और आपके कारण को वोट दिया है यह वास्तव में भी अच्छा है। अगर मैं कर सकता तो मैं दोनों को स्वीकार कर लेता। – Jack

1

उपयोग typesafe उत्प्रेरक, एसबीटी बुला का एक आधुनिक तरीका है, जो परियोजना टेम्पलेट्स और बीज के साथ आता है: https://typesafe.com/activator

Activator new 

Fetching the latest list of templates... 

Browse the list of templates: http://typesafe.com/activator/templates 
Choose from these featured templates or enter a template name: 
1) minimal-java 
2) minimal-scala 
3) play-java 
4) play-scala 
(hit tab to see a list of all templates) 
+4

मैं इस विचार के आंशिक हूं कि, जब संदेह में, मिश्रण में _more_ जादू जोड़ना आपकी समस्याओं को हल करने की संभावना नहीं है। – Cubic