【问题标题】:ThisBuild ignored for plugin settingKeyThisBuild 忽略插件设置键
【发布时间】:2017-05-07 23:38:33
【问题描述】:

这个问题与我对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 进行全局覆盖。

@编辑: 我发现version 设置我Defaults.scala 是使用:== 而不是:= 定义的。这是我要找的把戏吗?遗憾的是,它没有记录在案,而且它是 sbt 包的私有内容。

【问题讨论】:

    标签: scala sbt sbt-plugin


    【解决方案1】:

    我认为通过将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: _*)
      ...
    

    【讨论】:

    • 这正是我想通过使用 ThisBuild 避免的事情,所以我不必在所有模块中都指定它。
    • 您可以尝试的其他方法是scapegoatVersion in Global := "1.3.0"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多