首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置(inThisBuild(.))是在sbt吗?

设置(inThisBuild(.))是在sbt吗?
EN

Stack Overflow用户
提问于 2021-01-15 06:22:17
回答 2查看 1.1K关注 0票数 3

我刚刚使用scalaxb模板生成了一个sbt项目:

代码语言:javascript
复制
sbt new eed3si9n/scalaxb.g8

我得到了这个build.sbt文件:

代码语言:javascript
复制
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"
  )

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-16 19:12:07

inThisBuildsettings中意味着什么?

在语义上,它的意思与:

代码语言:javascript
复制
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配置,这对于定义一次设置序列并在CompileTest等中重用该设置序列非常有用。

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 (例如上面文件中的namelibraryDependencies )有什么不同?

请参阅构建范围的设置

若要对多个项目的公共设置进行筛选,请定义范围为ThisBuild的设置。其限制是右侧需要一个或多个范围为GlobalThisBuild的值或设置,并且没有为子项目设定范围的默认设置。

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

票数 9
EN

Stack Overflow用户

发布于 2021-01-15 11:30:27

来自sbt文档:

项目轴也可以设置为ThisBuild,这意味着“整个构建”,因此设置适用于整个构建,而不是单个项目。当项目没有定义特定于项目的设置时,构建级别设置通常被用作后备设置。

第一个设置适用于整个项目中的所有子项目,而第二个设置仅适用于根项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65731379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档