sbt - sbt 中的 settings(inThisBuild(...)) 是什么意思?
问题描述
我刚刚使用 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
在上面的文件中)有什么不同?
解决方案
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 年,Dale 贡献了另一个名为 的辅助函数inThisBuild(List(setting1, ...))
,类似于inConfig(Compile)(...)
将列表范围限定为ThisBuild
范围。这是由于 sbt 0.13 中的作用域被编写为organization in ThisBuild
而不是 2018 年引入的斜杠语法。
我通常在文件的根级别看到它
build.sbt
,而不是在settings
.
在根级别编写build.sbt
称为裸样式build.sbt。使用裸样式在语义上编写设置序列(包括inThisBuild(...)
)与将它们放入构建.settings(...)
的根子项目(位于的子项目file(".")
)中相同。2016年,当我将那行添加到 eed3si9n/scalaxb.g8 时,我想我比今天更致力于摆脱裸露的风格build.sbt
,所以我拒绝inThisBuild(...)
直接写build.sbt
,而是把它放进去.settings(...)
。
如上所述,我在 2018 年引入了斜杠语法,这让我对ThisBuild / scalaVersion
使用裸样式(并且仅用于ThisBuild / ...
和Global / ...
设置)有所了解,因此它与 shell 语法相同。
构建范围的设置
它与根本没有
inThisBuild
(例如name
,libraryDependencies
在上面的文件中)有什么不同?
请参阅构建范围的设置:
要考虑跨多个项目的通用设置,请将设置范围定义为
ThisBuild
. 限制是右侧需要是纯值或范围为Global
or的设置ThisBuild
,并且没有范围为子项目的默认设置。
ThisBuild
基本上是提供的特殊子项目名称,因此您可以为构建定义默认设置。当您定义一个或多个子项目时,当子项目未定义scalaVersion
时,它将回退到ThisBuild / scalaVersion
.
推荐阅读
- javascript - Vue - wrap text selection with span and make style two-way binding?
- javafx - 具有 JFX 11 导入的场景生成器
- android - Recycler View 显示带有空值的卡片
- php - php保存数组多维
- multithreading - 如何将 2 个大型 csv 数据集的一列与 col1+col2 作为键进行比较?
- reactjs - react.js 中的关键警告
- python - 为什么python3命令显示找不到它的错误
- python-3.x - 如何在 docker 更改容器的默认 python 版本?
- sql - 在r中循环sql
- angular - Angular IE11 返回 CORS 错误但数据仍然返回