2013-02-01 43 views
5

डिफ़ॉल्ट रूप से, एसबीटी src/main और src/tests से target/scala-[version]/classes और target/scala-[version]/test-classes के तहत क्रमशः स्रोत संकलित करता है। मैं कोर नामक एक और समूह को परिभाषित करना चाहता हूं जिसे मैं src/core/java या src/core/scala में डाल सकता हूं और इसे एक अलग वर्ग पथ में संकलित कर सकता हूं। मैं यह कैसे करु?एसबीटी में एक और संकलन क्षेत्र को परिभाषित करने के लिए कैसे?

मेरा उद्देश्य: मैं कक्षा फ़ाइलों के अलग-अलग समूह रखना चाहता हूं, क्योंकि मैं चल रहे एप्लिकेशन के लिए JVM प्रक्रिया को पुनरारंभ किए बिना, विकास के दौरान नए एप्लिकेशन कोड को पुन: संकलित और पुनः लोड करना चाहता हूं। इसलिए जब एप्लिकेशन प्रारंभ होता है तो कोर क्लासेस लोड हो जाएंगे, और वे src/main से बाकी सब कुछ लोड करने के लिए कस्टम क्लासलोडर का उपयोग करेंगे। उन बाद के वर्गों को पुनः लोड करने योग्य होगा। मुझे ऐसा करने की ज़रूरत है क्योंकि मैं एक संगीत कार्यक्रम लिख रहा हूं जो जेएनआई के माध्यम से एक सॉफ्टवेयर उपकरण लोड करता है, जो लोड करने में काफी समय लगता है। विकास कचरे के दौरान ऐप को रीबूट करना बहुत अधिक समय है।

मुझे मुख्य रूप से कक्षा फ़ाइलों को अलग करने की आवश्यकता है। अगर मैं जार का उत्पादन कर रहा था, तो मैं myapp-core.jar और myapp-main.jar चाहता हूं, लेकिन यह उतना महत्वपूर्ण नहीं है, क्योंकि यह अंतिम उत्पाद से अधिक विकास के लिए है।

एक पहला प्रयास:

val Core = config("core") 
... 
classDirectory in Core <<= crossTarget(t => file(t.getAbsolutePath + "core-classes")) 

इस त्रुटि देता है:

Reference to undefined setting: 
{.}/*:cross-target from {.}/core:class-directory 
    Did you mean *:cross-target ? 

मैं अब स्कोप के बारे में पढ़ा जाता हूँ ...

उत्तर

5

एसबीटी दस्तावेज में एक advanced configurations example नहीं है कि कस्टम संकलन विन्यास के कई पहलुओं को दिखाता है।

एक बुनियादी उदाहरण है:

object MyBuild extends Build { 

    lazy val root = Project(..., 
    settings = Defaults.defaultSettings ++ coreSettings 
) 

    // Declare the custom configuration. 
    lazy val Core = config("core") 

    lazy val coreSettings: Seq[Setting[_]] = 
    // Add the src/core/scala/ compilation configuration. 
    // This configures sources, classpaths, output directories, REPL, scalac, ... 
    inConfig(Core)(Defaults.configSettings) ++ Seq(
     // example dependency just for Core 
     libraryDependencies += "org.example" % "demo" % "1.0" % Core, 
     // register the custom core configuration 
     ivyConfigurations += Core 
    ) 
} 

पहुँच fullClasspath in Core कार्य के माध्यम से संकलित कोर classpath।

+0

यदि उदाहरण आपको आवश्यकता या समझने से अधिक शामिल है, तो आप अतिरिक्त कॉन्फ़िगरेशन के साथ विशेष रूप से क्या करना चाहते हैं? इसे प्रकाशित करें, इसे मुख्य जार में शामिल करें ...? –

+0

मुझे अभी तक उस उदाहरण को समझ में नहीं आया है। मैंने यह बताने के लिए प्रश्न में जोड़ा है कि मैं अतिरिक्त कॉन्फ़िगरेशन के साथ क्या करना चाहता हूं। –

+0

यह बहुत अच्छा काम करता है, लेकिन आप टेस्ट कॉन्फ़िगरेशन में कोर कॉन्फ़िगरेशन कैसे उपलब्ध कराते हैं? – Brendanator