2015-02-07 88 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,即變換這兩個設置到這個新的。

相關問題