2011-09-08 107 views
22

是否有可能覆蓋或修改內置的SBT任務(如編譯)以取決於我自己的Build.scala中的自定義任務?覆蓋例如直接「編譯」是不可能的,因爲它已經用惰性val定義,因此引用super.compile會發出編譯器錯誤「super可能不能用於懶惰值」。將新的任務依賴關係添加到內置的SBT任務中?

+0

SBT 0.13的可能重複http://stackoverflow.com/q/8554992/1305344 –

回答

5

由於谷歌搜索如何添加一個依賴於SBT,而目前的答案是deprecated as of 0.13.x並刪除在1.0時,會出現這個問題,這裏是更新後的答案,假設printActioncompile應取決於任務:

(Compile/compile) := ((Compile/compile) dependsOn printAction).value

7

回覆自我:http://code.google.com/p/simple-build-tool/wiki/ProjectDefinitionExamples#Insert_Task_Dependency告訴了答案:

如果您正在使用舊的0.7.x版本的SBT你可以這樣做:

import sbt._ 
class SampleProject(info: ProjectInfo) extends DefaultProject(info) { 
    lazy val printAction = task { print("Testing...") } 
    override def compileAction = super.compileAction dependsOn(printAction) 
} 
+4

請注意,此建議僅適用於'較舊'的SBT 0.7.x.目前的0.11是不同的。 –

+3

新版本如何做到這一點? – Hadesara

+1

此答案已過時。請參閱[我剛剛發佈的更新版本](https://stackoverflow.com/a/47654822/596329)。 – arussell84

17

更新:見arussell84的答案了現代的方式執行此

你應該能夠做到這一點是這樣的:

在名.bst文件:

compile <<= (compile in Compile) dependsOn jruby 

哪裏JRuby是你已經在項目/ something.scala文件中定義的任務關鍵:

val jruby = TaskKey[Unit]("jruby", "run a jruby file") 

而且,這不是你的問題的一部分,但你可以經常打電話Scala代碼:

compile <<= (compile in Compile) map { result => 
    println("in compile, something") 
    result 
} 
+6

在那裏有很多'編譯',我無法弄清楚這是如何擴展到向其他任務添加依賴關係的。我該如何添加依賴到'舞臺'? –

+0

@ScottMorrison我想你說:'舞臺<<舞臺依賴於jruby' – 0fnt

+2

這個答案已經過時。請參閱[我剛剛發佈的更新版本](https://stackoverflow.com/a/47654822/596329)。 – arussell84

0

base_dir/project/文件夾中創建一個文件build.sbt,把libraryDependencies += ...那裏。

這就是建立「構建項目」(也稱爲「元構建」)的慣用SBT方式。