这个问题与sbt-scapegoat
的麻烦有关,但我想在全球范围内理解这一点。
因此,sbt-scapegoat
定义了设置scapegoatVersion
和配置scapegoat
。可以使用简短而完整的源代码here。
当我设置scapegoatVersion in ThisBuild := "1.3.0"
时,它会被忽略:
> scapegoat:scapegoatVersion
[info] frontend/scapegoat:scapegoatVersion
[info] 1.0.0
[info] backend/scapegoat:scapegoatVersion
[info] 1.0.0
[info] {.}/scapegoat:scapegoatVersion
[info] 1.3.0
我理解是这样的,因为从scapegoatVersion := "1.0.0"
对象为每个项目导入autoImport
,这样的设置比scapegoatVersion in ThisBuild
更精确,所以覆盖它。
我的问题是:如何在插件中定义此类默认值,以允许使用ThisBuild
或Global
进行全局覆盖。
@edit:
我发现使用version
而不是Defaults.scala
定义了:==
设置:=
。这是我正在寻找的技巧吗?可悲的是,它没有记录,而且它是sbt
包的私有。
答案 0 :(得分:0)
我认为通过将scapegoatVersion
应用于ThisBuild
,您只需将其设置为"父项目" (也称为{.}
)。
从您粘贴的日志中看起来您有2个子模块,默认scapegoatVersion
仍然适用于此。
您是否尝试在某些commonSettings变量中定义版本并将其应用于子模块?有点像:
lazy val commonSettings = Seq(
scapegoatVersion := "1.3.0"
)
lazy val backend = (project in file("backend"))
.settings(commonSettings: _*)
...
lazy val frontend = (project in file("frontend"))
.settings(commonSettings: _*)
...