6

プラグインが提供するコマンドを 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。どんな助けでも大歓迎です!

4

1 に答える 1

1

コマンドはプロジェクトごとではありません。これらは最上位プロジェクトでのみ機能します。

また、タスクを試して使用するか、必要に応じてコマンドを使用したい入力タスクを使用することをお勧めします。

本当にコマンドが必要な場合は、一種の「ホルダー」タスクを実行する方法があります。「コマンド内で SBT SettingKey にアクセスできますか? 」の回答を参照してください。

于 2015-04-26T00:15:55.697 に答える