2015-12-10 68 views
4

在sbt 0.13.9中,我希望能夠運行一個任務,該任務從命令行接受參數,然後將這些參數傳遞給另外兩個任務。將參數傳遞給SBT中的多個任務

我最初的嘗試是沿着線的東西:

lazy val logTask = InputKey[Unit](...) 
lazy val runTask = InputKey[Unit](...) 

lazy val TestCase = config("testCase") extend Test 

runTask in TestCase := Def.inputTaskDyn { 
    val args: Seq[String] = spaceDelimited("<arg>").parsed 
    runReg(args) 
}.evaluated 

logTask in TestCase := Def.inputTaskDyn { 
    val args: Seq[String] = spaceDelimited("<arg>").parsed 
    log(args) 
}.evaluated  

def runReg(args: Seq[String]) = Def.taskDyn { 
    val argString = args.mkString(" ") 
    (logTask in TestCase).toTask(argString).value 

    (testOnly in TestCase).toTask(s" $argString") 
} 

def log(args: Seq[String]) { 
    (runMain in TestCase).toTask(s" LoggingClass $args.mkString(" ")") 
} 

但隨後在(logTask in TestCase).toTask(argsString).value

抱怨一個非法的動態參考argString的我也試過類似:

runTask in TestCase := { 
    val args: Seq[String] = spaceDelimited("<arg>").parsed 
    log(args).value 
    runReg(args).value 
} 

其中還有一個args的非法動態參考。

是否有任何方法將解析的參數傳遞給兩個任務並一個接一個地運行?

感謝您的任何幫助。

+0

您可以發佈您的整個構建文件嗎? – Andy

+0

https://gist.github.com/thejonathanwong/8757accdeabb568ae2b8 日誌記錄類是在添加到使用此插件的任何項目的jar中。 – hopo

+0

它看起來像這可能是[錯誤13.1](https://github.com/sbt/sbt/issues/1041) – pantalohnes

回答

1

不是指定args.mkString(" ")給一個變量,只是通過它,而不象下面這樣分配給任何一個變量:

(logTask in TestCase).toTask(args.mkString(" ")).value 

更新1:

這種問題,也可以用lazy initialization in sbt整理。所以,請嘗試如下所示:

lazy val argString = args.mkString(" ") 
(logTask in TestCase).toTask(argString).value