我刚刚使用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文件的根级,而不是在settings下看到它。它与根本没有inThisBuild (例如上面文件中的name和libraryDependencies )有什么不同?
发布于 2021-01-16 19:12:07
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配置,这对于定义一次设置序列并在Compile、Test等中重用该设置序列非常有用。
2015年,戴尔贡献另一个名为inThisBuild(List(setting1, ...))的辅助函数,它类似于inConfig(Compile)(...)将列表作用于ThisBuild作用域。这是由于SBT0.13的作用域被编写为organization in ThisBuild,而不是2018年引入的斜杠语法。
我通常在
build.sbt文件的根级,而不是在settings下看到它。
在build.sbt的根级编写被称为裸样式build.sbt。在语义上,使用裸样式编写设置序列(包括inThisBuild(...))与将它们放入构建的根子项目(file(".")的子项目)中是完全相同的。在2016年中,当我将这一行添加到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。
发布于 2021-01-15 11:30:27
来自sbt文档:
项目轴也可以设置为ThisBuild,这意味着“整个构建”,因此设置适用于整个构建,而不是单个项目。当项目没有定义特定于项目的设置时,构建级别设置通常被用作后备设置。
第一个设置适用于整个项目中的所有子项目,而第二个设置仅适用于根项目。
https://stackoverflow.com/questions/65731379
复制相似问题