2014-09-02 72 views
2

我使用SBT v0.13.2SBT如何通過輸入從一個inputTask到另一個inputTask

我想有它接受輸入任務與輸入任務的問題,設置一個輸入作爲系統性能和運行後,另一項任務所有這些,例如使用該系統屬性的測試。

我需要在單獨的任務中設置系統屬性,因爲overwise屬性在測試過程中不可見。但是在隨後的同一個任務中,它是可見的。

lazy val setEnvironmentTask = taskKey[Unit]("Sets environment variable") 

lazy val integrationTest = taskKey[Unit]("Runs integration test") 

lazy val runIntegrationTest = taskKey[Unit]("Runs everything") 

setEnvironmentTask := { 
    System.setProperty("checkEnv", "production") 
} 

integrationTest := { 
    (testOnly in Test).toTask(" integrations.MatchModelsIntegrationTest").value 
} 

runIntegrationTest := { 
    setEnvironmentTask.value 
    integrationTest.value 
} 

這工作,但你可以在setEnvironmentTask第二個參數是固定的看。

我找不到解決方案。一些方法導致error: Illegal dynamic reference,像下面其中兩個任務改爲inputTasks和進口增加:

import sbt.complete.Parsers.spaceDelimited 

lazy val setEnvironmentTask = inputKey[Unit]("Sets environment variable") 

lazy val runIntegrationTest = inputKey[Unit]("Runs everything") 

setEnvironmentTask := { 
    val env = spaceDelimited("<arg>").parsed.head 
    System.setProperty("checkEnv", env) 
} 

runIntegrationTest := { 
    val env = spaceDelimited("<arg>").parsed.head 
    setEnvironmentTask.toTask(env).value // <<<<< this is there is fails with "error: Illegal dynamic reference: env" 
    integrationTest.value 
} 

應該像sbt runIntegrationTest production

綜上所述可以使用,如何創建傳播輸入到其他inputTasks任務?

回答

5
import sbt.complete.Parsers.spaceDelimited 

lazy val setEnvironmentTask = inputKey[Unit]("Sets environment variable") 

lazy val runIntegrationTest = inputKey[Unit]("Runs everything") 

lazy val integrationTest = taskKey[Unit]("Runs integration test") 

lazy val setEnvTask: Def.Initialize[InputTask[Unit]] = Def.inputTask{ 
    val env = spaceDelimited("<arg>").parsed.head 
    System.setProperty("checkEnv", env) 
} 

setEnvironmentTask <<= setEnvTask 

runIntegrationTest := setEnvironmentTask.parsed.flatMap{ _ => 
    integrationTest.taskValue 
}.value 

integrationTest := { 
    println("integration test") 
} 
相關問題