esa*_*rbe 11 scope scala build sbt
我有一个任务lazy val task = TaskKey[Unit],需要lazy val setting = SettingKey[String]输入.我也有三种不同的,独立的配置范围(config("dev"),config("stage"),config("prod"))和build.sbt指定的不同值的文件setting为每个配置的作用域(的setting in stage := "foo"...).
我期望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"
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
如我如何制作SBT键中所述,请参阅当前配置的设置?,你可以使用inConfig如下.
改变这个:
settings = Defaults.defaultSettings ++ Seq(taskTask)
Run Code Online (Sandbox Code Playgroud)
对此:
settings = Defaults.defaultSettings ++
Seq(taskTask) ++
inConfig(dev)(Seq(taskTask)) ++
inConfig(stage)(Seq(taskTask)) ++
inConfig(prod)(Seq(taskTask))
Run Code Online (Sandbox Code Playgroud)
和瞧:
$ sbt
> task
Setting is: default setting
> dev:task
Setting is: default setting
> stage:task
Setting is: stage setting
> prod:task
Setting is: prod setting
Run Code Online (Sandbox Code Playgroud)
如果你有兴趣深入挖掘,inConfig可以在sbt.Project(http://harrah.github.io/xsbt/latest/api/index.html#sbt.Project$)中定义为"复制任务/设置子图"的功能进入不同的范围"(正如@MarkHarrah描述的那样).另外,请查看http://eed3si9n.com/sbt-010-guide并向下滚动到"更改范围",其中作者解释了inConfig(conf)(ss)"只有在未设置范围时才将设置范围设置为conf"配置".
我认为你需要写一些类似的东西
val devTaskSetting = task <<= setting in dev map { s: String =>
println("Setting in Dev is: " + s)
}
Run Code Online (Sandbox Code Playgroud)
您还可以定义单独的任务键,如下所示
val devTask = TaskKey[Unit]("task", "a simple task experiment") in dev
val stageTask = TaskKey[Unit]("task", "a simple task experiment") in stage
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4609 次 |
| 最近记录: |