2013-10-31 2 views
5

मैं कई एसबीटी 0.13 है/2.2 परियोजनाओं (वेबसाइट) खेलें। वे सभी बहु-मॉड्यूल हैं क्योंकि वे कुछ सामान्य कार्यक्षमता साझा करते हैं। यह उनके प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइलों को जटिल और लगभग समान दोनों बनाता है, लेकिन काफी नहीं।मैं एसबीटी (प्ले) बहु-परियोजनाओं में साझा कॉन्फ़िगरेशन का उपयोग कैसे करूं?

मैं परियोजनाओं में इन कॉन्फ़िगरेशन फ़ाइलों के जितना संभव हो सके साझा करने में सक्षम होना चाहता हूं (लगातार प्ले अपडेट 5+ वेबसाइटों को शाही दर्द तक अद्यतित करते हैं, सभी लगभग समान-उल्लेख- परियोजनाओं में निर्भरता सूची विकसित करना)।

build.properties और plugins.sbt परियोजनाओं भर में समान हैं और एक सरल स्क्रिप्ट के द्वारा ओवरराइट किया जा सकता। महान।

Build.scala जटिल काम है - मैं बहुत की तरह एक साझा आधार वर्ग को लागू करना चाहते हैं: कि Build.scala में क्या

abstract class MyBuildBase extends Build { ... } 

:

object ApplicationBuild extends MyBuildBuild { ... } 

आदेश में यह किसी भी बनाने के लिए बिल्कुल समझ में, MyBuildBase.scala को परियोजनाओं में साझा करने की आवश्यकता है। यह svn: बाहरी के साथ किया जा सकता है, जो निर्देशिकाओं पर काम करता है। जिसका मतलब है कि Build.scala संकलित होने पर मुझे किसी भी तरह से इस साझा निर्देशिका को सुलभ बनाने की आवश्यकता है (अन्यथा एसबीटी जोर से शिकायत करता है)।

पढ़ना http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.html और http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full-Def.html ऐसा लगता है इस तरह संभव हो जाना चाहिए।

हालांकि, यह वास्तव में अस्पष्ट है कि वास्तव में यह प्रोजेक्ट/प्रोजेक्ट/Build.scala फ़ाइल में वास्तव में इसे प्राप्त करने के लिए क्या करना है - मुझे का उदाहरण नहीं मिल रहा है "एक एसबीटी बिल्ड फ़ाइल जिसका उद्देश्य है sbt बिल्ड फ़ाइल और "" निर्माण में कुछ अतिरिक्त स्रोत फ़ाइलों को शामिल करें।

कोई सुझाव?

उत्तर

6

क्या आप शायद क्या करना चाहते हैं एक प्लगइन, या साझा लाइब्रेरी पैदा करते हैं।

आप एक निर्माण की तरह इस प्रकार के साथ एक एसबीटी परियोजना बना सकते हैं:

build.sbt

sbtPlugin := true 

organization := "you" 

name := "common-build" 

version := "1.0" 

फिर अपने अमूर्त वर्ग "MyBuildBase" src/main/scala में पैदा करते हैं। एक एसबीटी प्लगइन के रूप में इस परियोजना को जारी करें।

फिर अपने अन्य परियोजनाओं में, तो आप इस एक पुस्तकालय/प्लगइन के रूप में उपयोग कर सकते हैं। project/plugins.sbt में जोड़ें:

addSbtPlugin("you" % "common-build" % "1.0") 

और जब अपने निर्माण निर्माण इस अपने सामान्य निर्माण पुस्तकालय का समाधान हो जाएगा।

यदि आपको अधिक जानकारी चाहिए, तो एसबीटी प्लगइन्स के बारे में और अधिक देखें और प्लगइन को विस्तारित करने के बारे में कुछ हिस्सों को अनदेखा करें। प्लगइन्स केवल पुस्तकालय हैं जो एसबीटी के संस्करण संख्या और स्वयं के साथ संस्करणित हैं। बिल्ड के बीच साझा करने के लिए आप जो भी कोड चाहते हैं उसे रखने में सक्षम होना चाहिए।

+0

उत्कृष्ट सुझाव। बाहर निकलता है एसवीएन बाहरी फाइलों को संभाल सकता है न कि केवल v1.6 के बाद से निर्देशिकाएं, इसलिए मैंने इसे इस तरह हल किया क्योंकि यह मेरे विशेष मामले में आसान था। हालांकि, आपके उत्तर में वास्तव में पूछे गए प्रश्न को शामिल किया गया है, इसलिए इसे इस तरह चिह्नित करना। – Jxtps

0

नोट: 2016 में, Build.scalaBuild.sbt के लिए बहिष्कृत किया गया है।

यहाँ नया (दिसंबर है2016) multi-module with App Scala sbt templateMichael Lewis द्वारा।

प्रयोग

sbt new lewismj/sbt-template.g8 

फिर आप चला सकते हैं:

sbt compile 
sbt publish-local 
sbt assembly 

यह Scala SBT template (Library)

पर आधारित है

यह giter8 टेम्पलेट एक स्कैला पुस्तकालय के लिए एसबीटी बिल्ड फाइलें लिखेंगे।

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