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

时间:2015-12-10 15:56:13

标签: 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(" ")")
}

然后它抱怨(logTask in TestCase).toTask(argsString).value

中的非法动态参考argString

我也尝试过类似的事情:

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

还有args的非法动态参考。

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

感谢您的帮助。

1 个答案:

答案 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