gpt4 book ai didi

sbt - sbt 中的 settings(inThisBuild(...)) 是什么意思?

转载 作者:行者123 更新时间:2023-12-04 15:57:44 26 4
gpt4 key购买 nike

我刚刚使用 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"
)

settings 中的 inThisBuild 是什么意思(第 3 行)?我通常在 build.sbt 文件的根级别看到它,而不是在 settings 下。它与根本没有 inThisBuild 有什么不同(例如上述文件中的 namelibraryDependencies )?

最佳答案

What does the inThisBuild within settings mean?

语义上等同于:

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 以将它们限定为 编译配置,用于定义一次设置序列并在CompileTest等中重复使用。

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

I usually see it at the root level of the build.sbt file, not under settings.

build.sbt 的根级别编写称为 bare style build.sbt。使用裸样式在语义上编写设置序列(包括 inThisBuild(...))与将它们放在根子项目(子项目)中的 .settings(...)在构建的 file(".")) 处。在 2016当我将该行添加到 eed3si9n/scalaxb.g8 时,我想我比现在更多致力于摆脱裸露的风格 build.sbt,所以我拒绝直接在build.sbt上写inThisBuild(...),然后放到.settings(...)中。

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

构建范围设置

How is it different from not having inThisBuild at all (e.g. name and libraryDependencies in above file)?

Build-wide settings :

To factor out common settings across multiple projects, define the settings scoped to ThisBuild. The limitation is that the right-hand side needs to be a pure value or settings scoped to Global or ThisBuild, and there are no default settings scoped to subprojects.

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

关于sbt - sbt 中的 settings(inThisBuild(...)) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65731379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com