2015-02-07 223 views
3

我学习写一些更高级的SBT建设的文件,我碰到sbt-proguard的代码来:“<< =”在sbt设置中做什么?

binaryDeps <<= compile in Compile map { _.relations.allBinaryDeps.toSeq }, 
    inputs <<= fullClasspath in Runtime map { _.files }, 
    libraries <<= (binaryDeps, inputs) map { (deps, in) => deps filterNot in.toSet }, 
    outputs <<= artifactPath map { Seq(_) }, 
  • 我想知道什么呢< < =意味着在这种情况下?
  • 如何理解地图函数在第3行?
+1

在更新的版本(sbt> = 0.13)中,我们会以更简单的方式编写它:'libraries:= binaryDeps.value filterNot inputs.value.toSet'。 – sjrd 2015-02-07 09:44:09

+0

请参见[如何使用<< =使用定义的值来定义sbt任务:=引用另一个设置值.value?](http://stackoverflow.com/questions/20642575/how-is-an-sbt-task使用-不同-从酮-defined-定义与 - 该-REF)。 – 2015-02-09 05:51:41

回答

1

<<=DefinableSetting的方法(由TaskKeyInputKeySettingKey混合),其提供了一种方法来初始化构建设置。它在旧文档here描述:

:= assigns a value, overwriting any existing value. <<= uses existing values to initialize a setting. 

从本质上讲,在0.12(和当前版本,兼容性),这是一个方式来定义一个构建在其他一些构建各方面的(S)设置。

正如@sjrd所指出的,在0.13中引入了一个new task setting syntax,您可以用:=来代替。

在第三行中的map是通过获取仅从binaryDeps依赖项创建一个新的设置值是不是已经在inputs,即变换这两个设置到这个新的。