4

bSettingKeyを計算するときにのみSettingKey の値をオーバーライドしたいa1

import sbt._
import sbt.Keys._

object Build extends Build {
  val a1Key = SettingKey[String]("a1", "")
  val a2Key = SettingKey[String]("a2", "")
  val bKey  = SettingKey[String]("b", "")

  lazy val rootProject = Project("P", file(".")).settings(
   bKey := "XXX",
   a1Key <<= bKey((x) => ">>>"+x+"<<<"),
   a2Key <<= bKey((x) => ">>>"+x+"<<<")
  ) .settings(
   bKey in a1Key := "YYY"   //providing custom value in setting scope
  ) 
}

現在の結果は

> a1
[info] >>>XXX<<<
> a2
[info] >>>XXX<<<
> b
[info] XXX      

...しかし、私はYYYの値として見ることを目指していますa1:

> a1
[info] >>>YYY<<<
> a2
[info] >>>XXX<<<
> b
[info] XXX  

上記よりも優れた実際の例は、ビルドに一部runtimeのリソースを構成のみで追加し、アプリケーションがパッケージ化されているときに他のリソースを追加する場合です。たとえば、開発モード中と本番中にサーバーによって提供される GWT アプリのパブリック リソースの構築は異なります。たとえば、タスクの設定resource-directoriesをカスタマイズするとよいでしょう。runpackage

4

1 に答える 1

2

そもそも、設定a1Keya2Keyてオーバーライドできるようにする必要があります。bKey

lazy val rootProject = Project("P", file(".")).settings(
  bKey := "Fnord",
  a1Key <<= (bKey in a1Key)(x => ">>>" + x + "<<<"),
  a2Key <<= (bKey in a2Key)(x => ">>>" + x + "<<<")
).settings(
  bKey in a1Key := "Meep"
)

このように、コンピューティングa1Keyはより具体的な値を使用し、Meepコンピューティング中a2Keyにsbtはの定義をbKey in a2Key「検索」し、それを「検出」しないため、より一般的なbKey(デフォルトのスコープで)フォールバックします。定義されているため、使用されます。

編集:a1Keyこれは残念ながら、と設定の定義を提供する人a2Keyが必要な拡張ポイントを明示的に提供しない限り(設定スコープの依存関係の形式で)、依存関係をオーバーライドできないことを意味します。それは少なくとも私がそれを理解する方法です。

于 2013-02-03T19:01:03.403 に答える