设置(inThisBuild(…)在sbt中是什么意思?
我刚刚使用scalaxb模板生成了一个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 := &
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。我最好的猜测是,如果它处于顶层,其含义将是相同的,但我并不确定。