【发布时间】:2016-11-22 10:29:36
【问题描述】:
https://stackoverflow.com/a/21605652/1737727 的答案显示了如何覆盖主项目中使用 RootProject 定义的子项目的一项设置。我想知道是否有一种很好的方法可以为多个设置执行此操作,然后也可能为多个子项目执行此操作,因此您不必单独列出每个组合。这将是为了防止扩散并减少忘记组合和意外设置不匹配的机会。
当不使用RootProject 时,SBT docs 展示了如何使用常见的设置序列来做到这一点:
lazy val commonSettings = Seq(
organization := "com.example",
version := "0.1.0",
scalaVersion := "2.11.8"
)
lazy val core = (project in file("core")).
settings(commonSettings: _*).
settings(
// other settings
)
lazy val util = (project in file("util")).
settings(commonSettings: _*).
settings(
// other settings
)
但是RootProject 无法设置其设置。根据上面提到的答案,我尝试了以下类似的方法:
lazy val util = RootProject(file("../util"))
commonSettings.map(_.key).foreach(key => key in util := key.value)
但这似乎不是正确的方法。
我已经研究过使用 Global 或 ThisBuild 范围,但每个子项目在其自己的 build.sbt 文件中设置设置,如果我理解正确,该文件优先于这些更广泛的范围。
有没有很好的方法来做到这一点,还是我应该手动为每个子项目设置每个设置?我应该使用不同的范围,例如子项目在Global 中定义它们的设置,在ThisBuild 中定义主项目?
【问题讨论】: