12

を入力として受け取るタスクlazy val task = TaskKey[Unit]がありlazy val setting = SettingKey[String]ます。また、3 つの異なる独立した構成スコープ ( config("dev")config("stage")config("prod")) と、構成スコープごとにbuild.sbt異なる値を指定するファイル( ... ) もあります。settingsetting in stage := "foo"

taskconfigスコーププレフィックスを使用し て呼び出すと、タスクがそれぞれのconfigスコープの値を使用するようになると予想しました(たとえば>dev:task、タスクにsettingからの値を使用させdev、コマンドを使用すると、タスクにからの値を>stage:task使用させます...)。ただし、これは機能しないようです。settingstage

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)
}
4

2 に答える 2

1

のようなものを書く必要があると思います

val devTaskSetting = task <<= setting in dev map { s: String =>
   println("Setting in Dev is: " + s)
}

このように、個別のタスクキーを定義することもできます

val devTask   = TaskKey[Unit]("task", "a simple task experiment") in dev
val stageTask = TaskKey[Unit]("task", "a simple task experiment") in stage
于 2012-08-07T13:38:24.213 に答える