我有一个任务lazy val task = TaskKey[Unit]
需要一个lazy val setting = SettingKey[String]
作为输入。我还有三个不同的独立配置范围(config("dev")
,config("stage")
,config("prod")
)和build.sbt
文件,该文件为每个配置范围(setting in stage := "foo"
...)指定setting
的不同值。如何使一个sbt任务使用特定的配置范围?
我预计使用的配置范围前缀将使任务使用的值从各自的配置范围(调用task
如>dev:task
将使任务使用setting
值从dev
,使用命令>stage:task
将使任务使用setting
值从stage
,...)。但是,这似乎并不奏效。
我怎么能强迫task
从一个特定的配置范围使用的设置?
build.sbt:
setting := "default setting"
setting in stage := "stage setting"
setting in prod := "prod setting"
Build.scala:
import sbt._
import Keys._
object TaskBuild extends Build {
val setting = SettingKey[String]("setting", "a simple string setting")
val task = TaskKey[Unit]("task", "a simple task experiment")
val taskTask = task <<= setting map { s: String =>
println("Setting is: " + s)
}
lazy val dev = config("dev") describedAs("dev environment settings")
lazy val stage = config("stage") describedAs("stage environment settings")
lazy val prod = config("prod") describedAs("prod environment settings")
lazy val root = Project(
"project",
file("."),
settings = Defaults.defaultSettings ++ Seq(taskTask)
)
.configs(dev, stage, prod)
}
所以它是不可能在运行时决定使用什么样的配置范围,一个有定义每个可能的配置任务? – esarbe 2012-08-07 13:56:37
我不确定。但是你可以多次使用'map'的_same function_(任务主体)。不是这里的专家,所以也许等待更多评论。 – 2012-08-07 13:59:02
好吧,这是一个开始!谢谢! :d – esarbe 2012-08-07 14:02:11