作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 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 中看到的第二个参数是固定的。
我未能找到解决方案。一些方法导致错误:非法动态引用
,如下所示,其中两个任务更改为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生产
一样使用
总之,如何创建将输入传播到其他任务的 inputTasks?
最佳答案
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")
}
关于SBT如何将输入从一个inputTask传递到另一个inputTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25632113/
我是一名优秀的程序员,十分优秀!