如何解决settings(inThisBuild(...)) 在 sbt 中是什么意思? 元细节构建范围设置
我刚刚使用 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
配置,这对于定义一次设置序列并在 {{ 中重用它很有用1}}、Compile
等
在 2015 年,Dale contributed 另一个名为 Test
的辅助函数类似于 inThisBuild(List(setting1,...))
将列表范围限定为 inConfig(Compile)(...)
范围。这是由于 sbt 0.13 中的范围定义为 ThisBuild
而不是 2018 年引入的斜杠语法。
我通常在 organization in ThisBuild
文件的根级别看到它,而不是在 build.sbt
下。
在 settings
的根级编写被称为 bare style build.sbt。使用裸样式在语义上编写设置序列(包括 build.sbt
)与将它们放在构建的根子项目(inThisBuild(...)
处的子项目)中的 .settings(...)
中是相同的。在 2016 中,当我将该行添加到 eed3si9n/scalaxb.g8 时,我想我更多致力于摆脱裸样式 file(".")
,所以我拒绝了将 build.sbt
直接写在 inThisBuild(...)
上并将其放入 build.sbt
。
如上所述,我在 2018 年引入了斜杠语法,这让我对使用裸样式(并且仅用于 .settings(...)
和 ThisBuild / scalaVersion
设置)的 ThisBuild / ...
与shell语法相同。
构建范围设置
它与根本没有 Global / ...
有什么不同(例如,上面文件中的 inThisBuild
和 name
)?
要分解多个项目中的通用设置,请将设置范围定义为 libraryDependencies
。限制是右侧需要是范围为 ThisBuild
或 Global
的纯值或设置,并且没有范围为子项目的默认设置。
ThisBuild
基本上是一个特殊的子项目名称,提供它以便您可以为您的构建定义默认设置。当您定义一个或多个子项目时,并且当子项目未定义 ThisBuild
时,它将回退到 scalaVersion
。
来自 sbt 文档:
项目轴也可以设置为ThisBuild,意思是“整个 构建”,因此设置适用于整个构建而不是单个 项目。构建级别设置通常用作后备,当 project 未定义特定于项目的设置。
第一个设置适用于整个项目中的所有子项目,而第二个设置仅适用于根项目
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。