Ho un compito lazy val task = TaskKey[Unit]
che accetta come input lazy val setting = SettingKey[String]
. Ho anche tre diversi ambiti di configurazione indipendenti (config("dev")
, config("stage")
, config("prod")
) e un file build.sbt
che specifica valori diversi per setting
per ciascuno degli ambiti di configurazione (setting in stage := "foo"
...).Come fare un task sbt utilizzare un ambito di configurazione specifico?
I prevede che chiamare task
utilizzando il prefisso portata config renderebbe il compito utilizzare i valori dall'ambito rispettiva configurazione (es >dev:task
renderebbe il compito utilizza i valori setting
da dev
, utilizzando il comando >stage:task
renderebbe usa il compito setting
valori da stage
, ...). Tuttavia, questo non sembra funzionare.
Come è possibile forzare task
per utilizzare le impostazioni da un ambito di configurazione specifico?
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)
}
Quindi non è possibile decidere in fase di esecuzione quale ambito di configurazione utilizzare, si deve definire un'attività per ogni configurazione possibile? – esarbe
Non sono sicuro. Ma è possibile utilizzare la funzione _same_ (corpo del task) per 'map' più volte. Non è un esperto qui, quindi forse aspetta altri commenti. –
Beh, è un inizio! Grazie! : D – esarbe