可以使用解析的inputTask来调用sbt中的runTask吗?

时间:2016-03-16 18:35:26

标签: scala sbt

我正在尝试将sbt用作一般任务运行器(类似于rake / npm)。我可以通过inputTask以我想要的方式解析输入,但我完全不知道如何使用它来调用runTask / fullRunTask

val partners: List[Parser[String]] = List("foo", "bar")
val partnerParser = partners.reduce(_ | _)
val acceptArgs = (' ' ~> partnerParser ~ (' ' ~> StringBasic))

lazy val importDump = inputKey[Unit]("Import static data dump")
lazy val importDumpTask = importDump := {
  val (arg1, arg2) = acceptArgs.parsed
  // how can I make this call?
  // ... runTask(Compile, "foo.bar.baz.DoIt.dispatch", arg1, arg2).value
  }

我知道你不能直接从其他任务调用任务,只能“依赖”它们,所以上面的代码不起作用。

我知道我可以做类似

的事情
mainClass := Some("foo.bar.baz.DoIt.dispatch")
(runMain in Compile).toTask(s" foo.bar.baz.DoIt.dispatch $arg1 $arg2").value

但这意味着我无法使用任何解析/自动完成功能。

所以我的问题是:

如何使用inputTask解析输入,然后使用生成的参数调用代码中的main方法?

1 个答案:

答案 0 :(得分:1)

这在sbt中非常痛苦。我建议编写一个shell脚本(或使用sbt的built-in Process support)。

也就是说,可以通过编写一个变异Command的新the State object provided来完成此操作,并在remainingCommands字段中添加要作为项目运行的任务。