在sbt 0.13.9中,我希望能够运行一个从命令行接收参数然后将这些参数传递给另外两个任务的任务。
我最初的尝试是:
lazy val logTask = InputKey[Unit](...)
lazy val runTask = InputKey[Unit](...)
lazy val TestCase = config("testCase") extend Test
runTask in TestCase := Def.inputTaskDyn {
val args: Seq[String] = spaceDelimited("<arg>").parsed
runReg(args)
}.evaluated
logTask in TestCase := Def.inputTaskDyn {
val args: Seq[String] = spaceDelimited("<arg>").parsed
log(args)
}.evaluated
def runReg(args: Seq[String]) = Def.taskDyn {
val argString = args.mkString(" ")
(logTask in TestCase).toTask(argString).value
(testOnly in TestCase).toTask(s" $argString")
}
def log(args: Seq[String]) {
(runMain in TestCase).toTask(s" LoggingClass $args.mkString(" ")")
}
然后它抱怨(logTask in TestCase).toTask(argsString).value
我也尝试过类似的事情:
runTask in TestCase := {
val args: Seq[String] = spaceDelimited("<arg>").parsed
log(args).value
runReg(args).value
}
还有args的非法动态参考。
有没有办法将解析后的参数传递给两个任务并一个接一个地运行?
感谢您的帮助。
答案 0 :(得分:1)
不要将args.mkString(" ")
分配给变量,只需传递它而不分配任何变量,如下所示:
(logTask in TestCase).toTask(args.mkString(" ")).value
更新1:
此类问题也可以使用lazy initialization in sbt进行整理。所以,尝试下面的内容:
lazy val argString = args.mkString(" ")
(logTask in TestCase).toTask(argString).value