2015-02-20 6 views
6

Ich habe ein Problem damit, SBT-Teilprojekte dazu zu bringen, die von Plugins bereitgestellten Befehle zu erkennen. Ich habe folgende Plugin Quelle:SBT-Teilprojekte erkennen keine Plugin-Befehle

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

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

, die von einem Projekt wie folgt konfiguriert verwendet wird:

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

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

Das Plugin ist natürlich, aufgeführt in project/plugins.sbt. Allerdings, wenn ich sbt im Projekt öffnen, sehe ich folgende:

> 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 

Noch seltsame, consoleProject verwendet wird, kann ich sehen, dass der Befehl in dem Projekt die ein von DemoPlugin definiert ist!

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

Ich suche sub/demo in der Lage sein, zu geben und haben es den demo Befehl auszuführen. Jede Hilfe würde sehr geschätzt werden!

Antwort

1

Befehle sind nicht pro Projekt. Sie arbeiten nur für das Top-Level-Projekt.

Es wird auch empfohlen, Tasks zu verwenden und ggf. Tasks einzugeben, in denen Sie einen Befehl verwenden möchten.

Wenn Sie wirklich einen Befehl benötigen, gibt es eine Möglichkeit, eine Art "Halter" -Task zu haben, siehe die Antwort auf Can you access a SBT SettingKey inside a Command?

Verwandte Themen