Tôi có một nhiệm vụ lazy val task = TaskKey[Unit]
cần có lazy val setting = SettingKey[String]
làm đầu vào. Tôi cũng có ba phạm vi cấu hình độc lập khác nhau (config("dev")
, config("stage")
, config("prod")
) và tệp build.sbt
chỉ định các giá trị khác nhau cho setting
cho mỗi phạm vi cấu hình (setting in stage := "foo"
...).Cách thực hiện tác vụ sbt sử dụng phạm vi cấu hình cụ thể?
tôi mong đợi rằng gọi task
sử dụng tiền tố phạm vi cấu hình sẽ làm cho công việc sử dụng các giá trị từ phạm vi cấu hình tương ứng (ví dụ >dev:task
sẽ làm nhiệm vụ sử dụng setting
giá trị từ dev
, sử dụng lệnh >stage:task
sẽ làm nhiệm vụ sử dụng setting
giá trị từ stage
, ...). Tuy nhiên, điều này dường như không hoạt động.
Làm cách nào để bắt buộc task
sử dụng cài đặt từ phạm vi cấu hình cụ thể?
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)
}
Vì vậy, bạn không thể quyết định thời gian chạy phạm vi cấu hình nào để sử dụng, bạn phải xác định tác vụ cho từng cấu hình có thể? – esarbe
Tôi không chắc chắn. Nhưng bạn có thể sử dụng hàm _same_ (task body) cho 'map' nhiều lần. Không phải là một chuyên gia ở đây, vì vậy có thể chờ đợi thêm ý kiến. –
Vâng, đó là một sự khởi đầu! Cảm ơn! : D – esarbe