2016-07-19 6 views
10

में सामान्य सेटिंग्स का उपयोग करें https://stackoverflow.com/a/21605652/1737727 पर उत्तर मुख्य परियोजना से RootProject के साथ परिभाषित उपप्रोजेक्ट के लिए एक सेटिंग को ओवरराइड करने का तरीका दिखाता है। मैं सोच रहा था कि क्या एकाधिक सेटिंग्स के लिए ऐसा करने का एक अच्छा तरीका है, और फिर संभवतः कई सबप्रोजेक्ट्स के लिए भी, इसलिए आपको प्रत्येक संयोजन को अलग से सूचीबद्ध करने की आवश्यकता नहीं है। यह प्रसार को रोकने और संयोजन को भूलने और गलती से सेटिंग्स के मेल खाने का मौका कम करने के लिए होगा।एसबीटी 'रूटप्रोजेक्ट'

lazy val commonSettings = Seq(
    organization := "com.example", 
    version := "0.1.0", 
    scalaVersion := "2.11.8" 
) 

lazy val core = (project in file("core")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

lazy val util = (project in file("util")). 
    settings(commonSettings: _*). 
    settings(
    // other settings 
) 

लेकिन एक RootProject अपनी सेटिंग्स निर्धारित करने की कोई विधि है:

जब RootProject का उपयोग नहीं, SBT docs कैसे सेटिंग्स की एक आम अनुक्रम के साथ यह करने के लिए दिखाई देते हैं। मैंने उपर्युक्त उत्तर के अनुसार निम्नलिखित की तरह कुछ करने की कोशिश की:

lazy val util = RootProject(file("../util")) 
commonSettings.map(_.key).foreach(key => key in util := key.value) 

लेकिन यह सही दृष्टिकोण प्रतीत नहीं होता है।

मैं Global या ThisBuild गुंजाइश का उपयोग करते हुए देखा है, लेकिन हर subproject अपनी ही build.sbt फ़ाइल है, जो इन व्यापक स्कोप पर पूर्वता लेता है अगर मैं सही ढंग से समझ में सेटिंग सेट करती है।

क्या ऐसा करने का कोई अच्छा तरीका है, या क्या मुझे प्रत्येक उपप्रोजेक्ट मैन्युअल रूप से प्रत्येक सेटिंग को सेट करना चाहिए? क्या मुझे अलग-अलग क्षेत्रों का उपयोग करना चाहिए, उदा। subprojects Global में अपनी सेटिंग्स को परिभाषित करते हैं और ThisBuild में मुख्य परियोजना को परिभाषित करते हैं?

उत्तर

0

वैसे आप ऐसा कर सकता है:

commonSettings.map { s => s.mapKey(Def.mapScope(_.in(util))) } 

इस नए Seq[Setting[_]] जहां सेटिंग के दायरे से प्रत्येक util परियोजना में होने की परिवर्तित हो जाता है बनाता है। यह एक एसबीटी फ़ाइल में एक वैध प्रविष्टि है।

एक अन्य विकल्प है कि आप दोनों अपने मुख्य परियोजनाओं के लिए और RootProject की अपनी build.sbt में जोड़ने के लिए एक एसबीटी प्लगइन को परिभाषित किया गया है

लेकिन तुम चाहते हो सकता है अगर आप वास्तव में एक RootProject के बजाय के रूप में util परियोजना आयात करने की आवश्यकता पर विचार करने के एक नियमित उपप्रोजेक्ट।

+2

वास्तव में काम करता है, बहुत धन्यवाद! मैं 'रूटप्रोजेक्ट 'का उपयोग करता हूं क्योंकि उप प्रोजेक्ट मुख्य प्रोजेक्ट की एक भाई निर्देशिका में है (इसे एकाधिक प्रोजेक्ट्स द्वारा साझा किया जाता है) और आप' प्रोजेक्ट में प्रोजेक्ट नहीं कर सकते हैं (" ../ util ")'। बेहतर तरीके से सीखना बहुत अच्छा होगा, हालांकि शायद इस प्रश्न के विषय पर पूरी तरह से नहीं। – sgvd

+0

यदि 'उपयोग' को इसके निर्माण की आवश्यकता नहीं है, तो आप सीधे 'अप्रबंधित स्रोत डायरेक्टरीज़' को जोड़कर शामिल कर सकते हैं। –