Tengo una tarea lazy val task = TaskKey[Unit]
que toma lazy val setting = SettingKey[String]
como entrada. También tengo tres ámbitos de configuración distintos e independientes (config("dev")
, config("stage")
, config("prod")
) y un archivo build.sbt
que especifica diferentes valores para setting
para cada uno de los ámbitos de configuración (setting in stage := "foo"
...).¿Cómo hacer que una tarea sbt use un alcance de configuración específico?
que esperaba que llamar task
utilizando el prefijo alcance config haría que la tarea utilice los valores de los respectivos ámbitos de configuración (por ejemplo >dev:task
haría que la tarea utilice los setting
valores de dev
, usando el comando >stage:task
haría que la tarea utilice el setting
valores de stage
, ...). Sin embargo, esto no parece funcionar.
¿Cómo puedo forzar task
para usar la configuración desde un ámbito de configuración específico?
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)
}
Por lo tanto, no es posible decidir en el tiempo de ejecución qué ámbito de configuración usar, ¿hay que definir una tarea para cada configuración posible? – esarbe
No estoy seguro. Pero puede usar la _máxima función_ (cuerpo de la tarea) para 'mapa' varias veces. No es un experto aquí, así que quizás espere más comentarios. –
¡Bien, es un comienzo! ¡Gracias! :RE – esarbe