我正在尝试使用Play(2.2)中可用的sbt native 打包程序功能来创建/配置特定于环境的发行版(用于开发,质量和生产)。我尝试在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中工作。另外,可能有更好的方法可以实现我所寻找的目标。
最佳答案
inConfig(c)( settings )
表示在c
中未明确指定时,使用settings
作为配置。在此示例中,mappings
的配置被指定为Universal
,因此所有映射都添加到了Universal
配置中,而不是更具体的配置。
相反,请执行以下操作:
inConfig(prod)(Seq(
mappings <+= ...
))
也就是说,删除
in Universal
部分。注意:因为像
prod
这样的更具体的配置扩展了Universal
,所以它们包括了Universal
的映射。