2015-02-20 3 views
6

Ho riscontrato un problema con il rilevamento dei comandi secondari SBT da parte dei plug-in. Ho la seguente fonte plugin:I sottoprogetti SBT non riconoscono i comandi del plug-in

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

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

che viene utilizzato da un progetto che si configura come segue:

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

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

Il plugin è, ovviamente, elencati in project/plugins.sbt. Tuttavia, quando apro SBT nel progetto, vedo il seguente:

> 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 

Ancora più strano, utilizzando consoleProject, posso vedere che il comando nel progetto è quello definito dal DemoPlugin!

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

sto cercando di essere in grado di digitare sub/demo, e lo hanno eseguire il comando demo. Qualsiasi aiuto sarebbe molto apprezzato!

risposta

1

I comandi non sono per progetto. Funzionano solo per il progetto di livello superiore.

Si consiglia inoltre di provare e utilizzare le attività o, se necessario, le attività di input in cui si potrebbe voler utilizzare un comando.

Se è davvero necessario un comando, c'è un modo per avere una sorta di attività "titolare", vedere la risposta a Can you access a SBT SettingKey inside a Command?