2015-02-20 10 views
6

मुझे प्लगइन द्वारा प्रदान किए गए आदेशों को पहचानने के लिए एसबीटी सबप्रोजेक्ट प्राप्त करने में कोई समस्या है। मैं निम्नलिखित प्लगइन स्रोत:एसबीटी सबप्रोजेक्ट्स प्लगइन कमांड को पहचान नहीं पाते

object DemoPlugin extends AutoPlugin { 
    override lazy val projectSettings = Seq(commands += demoCommand) 

    lazy val demoCommand = 
    Command.command("demo") { (state: State) => 
     println("Demo Plugin!") 
     state 
    } 
} 

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

lazy val root = project in file(".") 

lazy val sub = (project in file("sub")). 
    enablePlugins(DemoPlugin). 
    settings(
    //... 
) 

प्लगइन, ज़ाहिर है, है project/plugins.sbt में सूचीबद्ध। हालांकि, जब मैं इस परियोजना में एसबीटी को खोलने, मैं निम्न देखें:

> sub/commands 
[info] List([email protected]) 
> sub/demo 
[error] Expected ':' (if selecting a configuration) 
[error] Not a valid key: demo (similar: doc) 
[error] sub/demo 

भी अजनबी, consoleProject का उपयोग कर, मैं देख सकता हूँ कि इस परियोजना में आदेश DemoPlugin द्वारा परिभाषित किया गया है!

scala> (commands in sub).eval.map { c => c.getClass.getMethod("name").invoke(c) } 
res0: Seq[Object] = List(demo) 

मैं sub/demo टाइप करें, और यह demo आदेश प्रदर्शन करने के लिए सक्षम होने के लिए देख रहा हूँ। कोई भी सहायताकाफी प्रशंसनीय होगी!

उत्तर

1

कमांड प्रोजेक्ट नहीं हैं। वे केवल शीर्ष-स्तरीय परियोजना के लिए काम करते हैं।

कार्यों की कोशिश करने और उपयोग करने की भी सिफारिश की जाती है, या यदि आवश्यक इनपुट कार्य जहां आप कमांड का उपयोग करना चाहते हैं।

यदि आपको वास्तव में कमांड की आवश्यकता है, तो "धारक" कार्य करने का एक तरीका है, Can you access a SBT SettingKey inside a Command?

का उत्तर देखें
संबंधित मुद्दे