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

设置(inThisBuild(…)在sbt中是什么意思?,sbt,Sbt,我刚刚使用scalaxb模板生成了一个sbt项目: sbt新的eed3si9n/scalaxb.g8 我得到了这个build.sbt文件: lazy val root = (project in file(".")). enablePlugins(ScalaxbPlugin). settings(inThisBuild(List( organization := "com.example", scalaVersion := &

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

sbt新的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"
  )
settings
中的
inThisBuild
是什么意思(第3行)?我通常在
build.sbt
文件的根级别看到它,而不是在
settings
下。它与完全没有
inThisBuild
(例如,上述文件中的
name
libraryDependencies
)有何不同?

来自sbt文档:

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

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

settings
中的
inThisBuild
是什么意思

在语义上,它的意思与:

ThisBuild/organization:=“com.example”
此构建/规模规避:=“2.13.2”
此构建/交叉标度规避:=序号(“2.13.2”、“2.12.12”)
今天,我推荐使用
ThisBuild/organization
。我可能应该更新我的旧Giter8模板

元细节 sbt有一个名为
inConfig(Compile)(List(setting1,…)
的助手函数,它将
映射到设置序列上,以将其范围限定到
编译
配置,这有助于定义一次设置序列,并在
编译
测试
等中重用它

2015年,另一个名为
inThisBuild(List(setting1,…))
的助手函数类似于
inConfig(Compile)(…)
将列表范围限定为
ThisBuild
范围。这是由于sbt 0.13,在此版本中,作用域被编写为
组织,而不是2018年引入的斜杠语法

我通常在
build.sbt
文件的根级别看到它,而不是在
settings

build.sbt
的根级别编写称为裸样式build.sbt。使用裸样式在语义上编写设置序列(包括
inThisBuild(…)
)与将它们放入生成的根子项目(位于
文件(“.”
)中的子项目)的
.settings(…)
)中是相同的。在年,当我将这一行添加到eed3si9n/scalaxb.g8时,我想我比现在更致力于摆脱裸露的
build.sbt
,因此我拒绝直接在
build.sbt
上编写
inThisBuild(…)
,而是将它放在
.settings(…)

如上所述,我在2018年引入了斜杠语法,这让我热身于使用裸样式的
ThisBuild/scalaVersion
(并且仅适用于
ThisBuild/…
Global/…
设置),因此它与shell语法相同

建立广泛的环境 它与完全没有
inThisBuild
有什么区别(例如,上述文件中的
name
libraryDependencies

见:

要在多个项目中分离出通用设置,请定义范围为
ThisBuild
的设置。限制是,右侧需要是纯值或范围为
Global
ThisBuild
的设置,并且没有范围为子项目的默认设置


ThisBuild
基本上是一个特殊的子项目名称,您可以为构建定义默认设置。当您定义一个或多个子项目时,并且当子项目没有定义
scalaVersion
时,它将退回到
ThisBuild/scalaVersion

,因此同时使用它们意味着只有根项目的所有子项目?您通常会有一个根项目和一些子项目。ThisBuild引用整个构建定义:root加上其他子项目。而且根设置肯定只适用于根项目。例如,组织应该在所有项目、根项目和其他子项目中都可以访问。而eg的scalaparser依赖项应该只在root中使用(它指向您项目的根文件夹)@Helix112,我认为您的答案并没有真正解决这个问题。问题不是“在这个构建中
意味着什么?”。相反,问题是,如果
inThisBuild
使它适用于所有子项目,那么为什么要将它嵌套在根项目的
.settings(…)
中,因为这显然使它看起来只适用于根项目?我也很惊讶和困惑地看到这一点,特别是因为它来自Eugene自己的一个repo。我最好的猜测是,如果它处于顶层,其含义将是相同的,但我并不确定。