2012-07-25 14 views
48

मैं निम्नलिखित और एक आम कोर पुस्तकालय एक स्काला आवेदन की स्थापना: जड़किसी अन्य एसबीटी परियोजना से बाहरी एसबीटी परियोजना का संदर्भ कैसे लें?

-> /ApplicationA 
    -> /project 
    -> /build.sbt 
-> /CoreLibrary 
    -> /project 
    -> /build.sbt 

मैं ला ग्रहण परियोजना संदर्भ CoreLibrary को applicationâ से एक संदर्भ जोड़ने के लिए है, ताकि हर बार CoreLibrary बदलता है applicationâ है चाहता हूँ साथ ही बनाया गया। मैंने कोशिश की applicationâ के लिए build.Scala के निम्नलिखित सामग्री:

val core = Project(
     id = "platform-core", 
     base = file("../CoreLibrary")) 

    val main = Project(id = "application, base = file(".")).dependsOn(core) 

हालांकि, जब संकलन applicationâ एसबीटी शिकायत है कि एक निर्भरता किसी उप हो सकता है !!:

java.lang.AssertionError: assertion failed: Directory C:\git\CoreLibrary is not contained in build root C:\git\ApplicationA 

यह पूरी तरह से स्पष्ट लगता है , इस परियोजना निर्भरता का सही तरीका क्या है?

lazy val core = RootProject(file("../CoreLibrary")) 

val main = Project(id = "application", base = file(".")).dependsOn(core) 

मैं एक multimodule खेलने का निर्माण के साथ एक काम कर उदाहरण है:

उत्तर

41

आप ऐसे ही अपनी परियोजना पर एक स्रोत निर्भरता कर सकते हैं https://github.com/ahoy-jon/play2MultiModule/blob/master/playapp/project/Build.scala

लेकिन मैं उचित तरीके से लगता है (यह निर्भर करता है आपके संदर्भ) ऐसा करने के लिए

-> /project/ 
    -> Build.scala 
-> /ApplicationA 
    -> /project 
    -> /build.sbt 
-> /CoreLibrary 
    -> /project 
    -> /build.sbt 

दो परियोजनाओं और उनके बीच निर्भरताओं का संदर्भ देना है।

+0

पहला दृष्टिकोण पूरी तरह से काम करता था! धन्यवाद! रूटप्रोजेक्ट का उपयोग करना था :) दूसरे दृष्टिकोण के साथ समस्या यह है कि वे 2 गीथब रेपो हैं, इसलिए उन्हें काम करने के लिए आपको शीर्ष पर एक अतिरिक्त आवश्यकता होगी या कुछ – Diego

+1

@Diego अलग गिट रखने के लिए एक आसान तरीका के लिए गिट सबमिशन देखें एक एकल, बाहरी, गिट रेपो के तहत repos। –

+3

तथाकथित "उचित तरीका" एक खराब समाधान आईएमओ है। आपको दो भाई बहनों के बीच निर्भरता घोषित करने के लिए एक कंटेनर परियोजना की आवश्यकता नहीं होनी चाहिए। –

19
एसबीटी 0.12.1 साथ

यह एक परियोजना के लिए एक सरल संदर्भ प्राप्त करना संभव लगता है:

मैं ProjectRef बजाय RootProject

http://www.scala-sbt.org/0.12.1/api/sbt/ProjectRef.html

ProjectRef(file("../util-library"), "util-library") 

एसबीटी-ग्रहण भी काम करता है इस्तेमाल किया।

+0

बढ़िया! लेकिन केवल तभी काम करता है जब सबप्रोजेक्ट स्कैला के समान संस्करण का उपयोग करता है। –

11

एसबीटी 0.13 के बाद से, आप बहु परियोजना परिभाषाओं सीधे .sbt में एक Build.scala फ़ाइल की जरूरत के बिना बना सकते हैं।

तो पर निम्नलिखित जोड़ना एप्लिकेशन ए/प्रोजेक्ट/build.sbt पर्याप्त होगा।

lazy val core = RootProject(file("../CoreLibrary")) 

val main = Project(id = "application", base = file(".")).dependsOn(core) 
संबंधित मुद्दे