如何定义仅为根项目调用的任务?

时间:2014-08-11 11:00:48

标签: sbt

当我定义一个任务时,它会在多项目构建中为每个项目调用:

import sbt._
import Keys._
import IO._

object EnsimePlugin extends Plugin {

  val ensime = TaskKey[Unit](
    "generateEnsime",
    "Generate the ENSIME configuration for this project")

  override val projectSettings = Seq(
    ensime := generateEnsime (
      (thisProject in Test).value,
      (update in Test).value
    )
  )

  private def generateEnsime(proj: ResolvedProject, update: UpdateReport): Unit = {
    println(s"called by ${proj.id}")
  }    
}

如何定义任务以便仅为根项目调用它?

他们通常是气馁的,但这可能是对Command的有效使用吗?例如比如sbt-idea插件。

1 个答案:

答案 0 :(得分:2)

关于Aggregation的官方文档:

  

在进行聚合的项目中,在这种情况下是根项目,   你可以控制每个任务的聚合。

它将aggregate键定义为值为false的任务作为:

aggregate in update := false

使用命令进行会话处理,否则需要在任务中执行其他步骤。它并不一定意味着它在任务中更难,但我对命令与任务的理解是前者更适合于会话操作。我可能错了,但在你的特殊情况下,不需要任何命令。