2015-09-15 27 views
1

我是SBT的新開發任務,我試圖找出如何創建一個集成我現有代碼的任務。如何在SBT中創建調用方法的任務?

在我的代碼我有了run方法需要幾個參數

object MyObject { 
    def run(param1: String, param2: Int, param3: String, ...) = {} 
} 

我的問題是一個單獨的對象:我怎樣才能在SBT定義任務調用我run法規定的所有參數我的build.sbt文件?

我能想象這樣的事情在build.sbt

lazy val myTask: TaskKey[Seq[File]] = taskKey[Seq[File]]("My task") 
lazy val myTaskRun = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) => 
    val param1 = ... 
    val param2 = ... 
    val param3 = ... 
    val paramN = .... 
    MyObject.run(param1, param2, param3, ...) 
    Seq(file("path")) 
    } 
+0

如果對象是你的構建的一部分,你可以按照你的寫法來調用它。該文件應該駐留在'project'目錄中 – dmitry

回答

0

1.您可以使用fullRunInputTask了點。

在你build.sbt

lazy val example = InputKey[Unit]("example", "Run something.") 

fullRunInputTask(example, Compile, "somefun.CallMe") 

src/main/scala/somefun/CallMe.scala

package somefun 

object CallMe { 
    def main(args: Array[String]) : Unit = { 
    println("Params are: " + args.mkString(", ")) 
    } 
} 

要打電話給你的任務使用example,例如「比如1 2 3」

2.您可以創建自己的InputTask

see InputTask in SBT Doc

創建一個自定義InputTask允許靈活的輸入解析器(與標籤的建議),允許與其他任務鏈接。它簡單地整合到SBT中。

相關問題