मान लीजिए मेरी कंपनी में एक व्यक्ति के पास एक एसबीटी परियोजना है जिसे commons
कहा जाता है जो कि सामान्य सामान्य उद्देश्य है। इस परियोजना को पारंपरिक एसबीटी तरीके से परिभाषित किया गया है: project/Build.scala
फ़ाइल में बिल्ड परिभाषा के साथ मुख्य फ़ोल्डर में।प्रोजेक्ट बनाने के लिए इसे कैसे निर्दिष्ट करें एक अन्य प्रोजेक्ट बी को पहले बनाया जाना है?
अब कोई अन्य व्यक्ति databinding
नामक एक प्रोजेक्ट विकसित कर रहा है जो commons
पर निर्भर करता है। हम project/Build.scala
के साथ इस परियोजना को उसी तरह परिभाषित करना चाहते हैं।
हम निम्नलिखित निर्देशिका लेआउट है
dev/
commons/
src/
*.scala files here...
project/
Build.scala
databinding/
src/
*.scala files here...
project/
Build.scala
मैं कैसे निर्दिष्ट कर सकते हैं कि databinding
commons
की आवश्यकता पहले निर्मित किया जाना है और उत्पादन वर्ग फ़ाइलों का उपयोग करें?
मैं Multi-project builds पढ़ा है, और databinding
के निर्माण परिभाषा के लिए निम्नलिखित के साथ आया था:
object MyBuild extends Build {
lazy val root = Project(id = "databinding", base = file(".")) settings (
// ... omitted
) dependsOn (commons)
lazy val common = Project(id = "commons",
base = file("../commons")
)
}
यह छोड़कर काम नहीं करता: एसबीटी ..
पसंद नहीं करता है और एक AssertionError फेंकता है। जाहिर है, commons
databinding
के अंदर एक फ़ोल्डर होना चाहिए। लेकिन इन दो परियोजनाओं को अलग गिट भंडारों में रखा जाता है, जिन्हें हम घोंसला नहीं कर सकते हैं।
यह निर्भरता ठीक से कैसे निर्दिष्ट की जा सकती है?
धन्यवाद स्पष्टीकरण, डेविड के लिए बहुत कुछ के लिए नमूना है:
यहाँ RootProject उपयोग करने का एक नमूना है। यह अजीब लगता है, क्या ऐसा इसलिए है क्योंकि अन्य परियोजनाएं मेरे प्रोजेक्ट 'कॉमन्स' का उपयोग करती हैं, इसकी 'scala' फ़ाइल में पूर्ण परिभाषा नहीं हो सकती है? –
और, क्या कोई विकल्प है - उदाहरण के लिए, एक रिज़ॉल्यूशन जोड़ना जो परियोजनाओं द्वारा उत्पन्न जार को देखता है, यह इस पर निर्भर करता है? –
आपके पहले प्रश्न के बारे में, यह एक एसबीटी प्रतिबंध है जो आपको '* का उपयोग करने से रोकता है।उप-परियोजनाओं को परिभाषित करने के लिए स्कैला फ़ाइल। मुझे लगता है कि एसबीटी परियोजना परिभाषा फाइलों को विलय करने के तरीके के कारण यह एक सीमा है। सौभाग्य से, '* .sbt' फ़ाइलें आपकी रूट प्रोजेक्ट 'Build.scala' से vals, सेटिंग्स ... तक पहुंच पाएगी। उदाहरण के लिए स्थानीय (प्रकाशन-स्थानीय) में अपना 'सामान्य' प्रकाशित करने के लिए दूसरी टिप्पणी में आप इसका उल्लेख भी कर सकते हैं और रिज़ॉल्यूवर को इसे पुनर्प्राप्त करना चाहिए। यदि आप एक स्नैपशॉट सिस्टम का उपयोग करना चाहते हैं तो निर्भरता परिभाषा में 'isChanging()' जोड़ने के लिए सावधान रहें। उम्मीद है कि यह मदद करेगा। – David