scala – 将参数传递给SBT中的多个任务

在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(" ")")
}

但后来它抱怨了一个非法动态参考argString(TestCase中的logTask).toTask(argsString).value

我也尝试过类似的东西:

runTask in TestCase := {
  val args: Seq[String] = spaceDelimited("<arg>").parsed
  log(args).value
  runReg(args).value
}

它还有args的非法动态参考.

有没有办法将解析后的参数传递给两个任务并一个接一个地运行?

谢谢你的帮助.

最佳答案 而不是将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
点赞