16

我能够在编译之前自动执行任务:

compile in Compile <<= (compile in Compile).dependsOn(myTask)

我如何做同样的事情,但编译之后?

我知道我可以做到:

compile in Compile <<= (compile in Compile) map{x=>
  // post-compile work
  doFoo()
  x
}

执行任意 Scala 代码,但我需要在发生编译事件时自动执行目标任务本身

做类似的事情:

val foo = TaskKey[Unit]("foo", "...")
val fooTask = foo <<= scalaInstance map {si =>
...
} dependsOn(compile in Compile)

如果我从 sbt> 提示符键入“foo”,则可以工作;ie task 在编译后执行,但目标是挂钩到 compile 任务本身,所以每当编译发生时,编译完成后会自动调用 foo 任务。

这是可能的,还是我以错误的方式处理内置编译任务?

4

1 回答 1

13

通常,有一些任务取决于您的任务。

如果compile用来表示“为 Grunt 编译和设置”,那么创建一个prepareGrunt依赖于compilemyTask运行它的任务。

如果myTask应该在项目的类和资源被其他东西使用之前运行,则使其成为exportedProducts. run依赖项目中的和和任务test之类的任务将从该任务中获取导出的类路径条目。

“编译后运行”的危险在于它myTask不会在实际需要它的任务之前运行。有triggeredByon 方法Initialize[Task[T]],但它很容易被滥用,并且只应在已知任务的输出仅在所有任务执行后才使用时使用。

于 2013-06-21T20:35:32.973 回答