我正在尝试将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方法?
答案 0 :(得分:1)
这在sbt中非常痛苦。我建议编写一个shell脚本(或使用sbt的built-in Process
support)。
也就是说,可以通过编写一个变异Command
的新the State
object provided来完成此操作,并在remainingCommands
字段中添加要作为项目运行的任务。