SBT子项目无法识别插件命令

时间:2015-02-20 19:40:17

标签: sbt sbt-plugin

我遇到了让SBT子项目识别插件提供的命令的问题。我有以下插件源:

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中。但是,当我在项目中打开sbt时,我看到以下内容:

> sub/commands
[info] List(sbt.SimpleCommand@413d2cd1)
> 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 个答案:

答案 0 :(得分:1)

命令不是每个项目。他们只为顶级项目工作。

还建议您尝试使用任务,或者在需要时输入可能需要使用命令的任务。

如果你真的需要一个命令,有一种方法可以拥有一个"持有者"任务,请参阅Can you access a SBT SettingKey inside a Command?

的答案