对于插件settingKey,ThisBuild被忽略

时间:2016-12-22 10:58:00

标签: scala sbt sbt-plugin

这个问题与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更精确,所以覆盖它。

我的问题是:如何在插件中定义此类默认值,以允许使用ThisBuildGlobal进行全局覆盖。

@edit: 我发现使用version而不是Defaults.scala定义了:==设置:=。这是我正在寻找的技巧吗?可悲的是,它没有记录,而且它是sbt包的私有。

1 个答案:

答案 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: _*)
  ...