尝试/最后使用SBT任务

时间:2015-09-30 14:57:13

标签: sbt

我有一个名为myTask的现有任务,我无法控制其实现。

我想以这种方式重新定义它: myTask := { val x = prepare() try myTask.value finally cleanup(x) }

您可能知道,此代码无效,因为我们无法控制何时执行myTask.value

可以使用prepare调用

Def.sequential(),使用cleanup结构调用andFinally。唯一的问题是cleanup如何获得prepare()的返回值 Def.sequential{ Def.task{ prepare() }, myTask }.andFinally(cleanup(???))

一种解决方法是使用全局变量,但这是一个肮脏的黑客。

有什么想法吗?

Related doc

1 个答案:

答案 0 :(得分:1)

我尝试使用全局变量,虽然它不是实现它的最优雅方式,但它可以正常工作。

我有:

  • 项目/ MyTasks.scala
  • build.sbt
<{1}}中的

摘要:

MyTasks.scala
<{1}}中的

摘要:

object MyTasks {
   var x = Option.empty[String]

   def prepare(): String = ???
   def cleanup(x: String): Unit = ???
}

通过这种方式,我们可以从build.sbt获取状态,并绕过SBT限制。