【问题标题】:Passing arguments to multiple tasks in SBT将参数传递给 SBT 中的多个任务
【发布时间】:2015-12-23 22:59:04
【问题描述】:

在 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 动态引用。

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

感谢您的帮助。

【问题讨论】:

标签: scala sbt


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多