代码之家  ›  专栏  ›  技术社区  ›  krismath maasg

设置(inThisBuild(…)在sbt中是什么意思?

sbt
  •  0
  • krismath maasg  · 技术社区  · 4 年前

    我刚刚使用scalaxb模板生成了一个sbt项目:

    sbt new eed3si9n/scalaxb.g8
    

    我知道了 build.sbt

    lazy val root = (project in file(".")).
      enablePlugins(ScalaxbPlugin).
      settings(inThisBuild(List(
        organization  := "com.example",
        scalaVersion  := "2.13.2",
        crossScalaVersions := Seq("2.13.2", "2.12.12")
      ))).
      settings(
        name          := "test-scalaxb",
        libraryDependencies ++= Seq(dispatch, scalaXml, scalaParser)
      ).
      settings(
        scalaxbDispatchVersion in (Compile, scalaxb) := dispatchV,
        scalaxbPackageName in (Compile, scalaxb)     := "generated"
      )
    

    这是什么意思 inThisBuild settings 平均值(第3行)?我通常看到它的根级别的 build.sbt 文件,不在下面 设置 内建 根本不。 name libraryDependencies 在上面的文件中)?

    0 回复  |  直到 4 年前
        1
  •  7
  •   Eugene Yokota    3 年前

    这是什么意思 inThisBuild 在内部 settings 意思是

    ThisBuild / organization  := "com.example"
    ThisBuild / scalaVersion  := "2.13.2"
    ThisBuild / crossScalaVersions := Seq("2.13.2", "2.12.12")
    

    今天,我推荐使用 ThisBuild / organization . 我可能应该更新我的旧Giter8模板。

    元细节

    sbt有一个名为 inConfig(Compile)(List(setting1, ...)) map 通过设置序列来确定它们的范围 Compile 配置,用于一次性定义设置序列并在中重用 编写 Test

    2015年, Dale contributed inThisBuild(List(setting1, ...)) ,与 inConfig(Compile)(...) 将列表的范围限定为 ThisBuild 范围这是由于sbt 0.13中的作用域编写为 organization in ThisBuild 而不是2018年引入的斜杠语法。

    我通常看到它的根级别的 build.sbt 文件,不在下面 设置

    在文件的根级别写入 build.sbt 被称为 裸体风格 build.sbt。语义写入设置序列(包括 inThisBuild(...) )使用裸样式与将它们放入相同 .settings(...) 在根子项目中(位于 file(".") 2016 更多 致力于摆脱赤裸裸的风格 比我今天还高,所以我拒绝写作 inThisBuild(…) 直接在 把它放进去 .设置(…)

    如上所述,我在2018年引入了斜杠语法,这让我开始使用斜杠语法 ThisBuild / scalaVersion ThisBuild / ... Global / ... 设置),因此它与shell语法相同。

    建立广泛的环境

    它与没有有什么不同 内建 根本不。 name libraryDependencies 在上面的文件中)?

    看见 Build-wide settings :

    要在多个项目中分离出公共设置,请定义范围为的设置 此版本 . 限制是右侧需要是纯值或范围为的设置 Global 此版本 ,并且没有适用于子项目的默认设置。

    此版本 基本上是一个特殊的子项目名称,提供该名称以便您可以为生成定义默认设置。定义一个或多个子项目时,以及子项目未定义时 scalaVersion 它将退回到 这个构建/规模厌恶 .

        2
  •  0
  •   Helix112    4 年前

    从sbt文件中:

    项目轴也可以设置为ThisBuild,这意味着整个 生成,因此设置应用于整个生成,而不是单个生成 项目生成级别设置通常在 project未定义特定于项目的设置。

    第一个设置适用于整个项目中的所有子项目,而第二个设置仅适用于根项目