【发布时间】:2014-10-27 05:36:24
【问题描述】:
我在使用 sbt v0.13.2 时遇到输入任务问题
我想要一个接受输入的任务,将该输入设置为系统属性,然后运行另一个任务,例如使用该系统属性的测试。
我需要在单独的任务中设置系统属性,因为过度属性在测试期间不可见。然而,在同一任务的后续运行期间,它是可见的。
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?
【问题讨论】:
标签: sbt