SBT,<< =和:=之间的差异

时间:2014-04-01 19:29:43

标签: scala sbt

这些方法are not described in the documentation。我主要在我的.sbt文件中使用:=,但有时,由于我还不了解的原因,我用:=分配的任务不起作用(意味着任务不会产生副作用)效果并且不返回任何内容),并使用<<=。那么<<=:=之间有什么区别?

编辑:

下面的示例运行清理任务,完成后(doFinally),同时运行其他两个任务。

gae_prep_war := {
  val after = Def.task {
    (gae_copyJars).value; (compile in Compile).value;
  }
  (gae_clean, after) {
    (clean, task) => clean doFinally task
  }
}

现在它不起作用,没有错误,但也没有效果或输出;如果我将:=更改为<<=则可行。我的SBT版本是0.13.0并使用Scala 2.10.2。

EDIT2:

如果我只是将:=附加到外部表达式,我发现.value有效:

gae_prep_war := {
  val after = Def.task {
    (gae_copyJars).value; (compile in Compile).value;
  }
  (gae_clean, after) {
    (clean, task) => clean doFinally task
  }
}.value

  ^

但我仍然不太明白为什么......

1 个答案:

答案 0 :(得分:5)

在sbt 0.13中,<<=已过时。当任务定义引入了对其他任务的依赖时,它被使用 - 它允许您提取其他任务的结果。以下是0.12.4文档:http://www.scala-sbt.org/0.12.4/docs/Getting-Started/More-About-Settings.html#computing-a-value-based-on-other-keys-values

在0.13中,您可以随时使用:=,因此您可以在此处查看文档在0.13中的变化情况:http://www.scala-sbt.org/0.13.1/docs/Getting-Started/More-About-Settings.html#computing-a-value-based-on-other-keys-values

因此,对于0.13及更高版本,忘记<<=是安全的。

如果上面的文档链接没有意义,可能有助于回到入门指南的开头并阅读以获得背景。