6

我正在尝试使用 Play (2.2) 中提供的 sbt 本机打包程序功能创建/配置特定于环境的发行版(用于开发、质量和生产)。我尝试使用 build.sbt 文件中的以下设置来实现这一点:

val dev  = config("dev")  extend(Universal)
val qual = config("qual") extend(Universal)
val prod = config("prod") extend(Universal)


def distSettings: Seq[Setting[_]] =
  inConfig(dev)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir =>
     println("dev")
     (dir / "start.bat.dev") -> "bin/start.bat"
     // additional mappings
   }
  )) ++
  inConfig(qual)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir =>
      println("qual")
      (dir / "start.bat.qual") -> "bin/start.bat"
      // additional mappings
    }
  )) ++
  inConfig(prod)(Seq(
    mappings in Universal <+= (resourceDirectory in Compile) map { dir =>
      println("prod")
      (dir / "start.bat.prod") -> "bin/start.bat"
      // additional mappings
    }
  ))


play.Project.playScalaSettings ++ distSettings

在 SBT 控制台中,当我输入“dev:dist”时,我希望只看到“dev”作为输出,并且相应地只看到要使用的相应映射。相反,看起来所有配置中的所有映射都已合并。很可能我不明白配置应该如何在 SBT 中工作。此外,可能有更好的方法可以实现我正在寻找的东西。

4

1 回答 1

2

inConfig(c)( settings )表示在c中未明确指定时用作配置settings。在示例中, 的配置mappings被指定为Universal,因此所有映射都添加到Universal配置中,而不是更具体的映射。

相反,请执行以下操作:

inConfig(prod)(Seq(
  mappings <+= ...
))

即,移除in Universal零件。

注意:因为像prod扩展这样更具体的配置,Universal它们包括来自Universal.

于 2013-12-13T14:29:39.373 回答