SBT,<< =和:=之间的区别

Dom*_*kis 4 scala sbt

文档中未描述这些方法.我主要使用:=我的.sbt文件,但有时候,由于我还不了解的原因,我指定的:=任务不起作用(意味着任务不会产生副作用而且不会返回任何内容),以及与...合作<<=.那么<<=和之间的区别是:=什么?

编辑:

我的下面的例子运行一个清理任务,当它完成时(doFinally),同时运行另外两个任务.

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

因为它现在不起作用,没有错误,但也没有效果或输出; 如果我改变:=<<=它的工作原理.我的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

  ^
Run Code Online (Sandbox Code Playgroud)

但我还是不太明白为什么......

Hav*_*c P 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-其他密钥值

在0.13中你可以随时使用:=,所以你可以在这里看到文档如何在0.13中改变:http://www.scala-sbt.org/0.13.1/docs/Getting-Started/More-About-Settings.html#计算的一个值,基于上其他密钥值

因此,对于0.13及以上,可以安全地忘记<<=.

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