本页概述了 sbt 加载特定构建设置的机制,包括用户可以控制所有内容排序的钩子。
如其他地方所述,sbt 通过 Setting[_]
对象构建其初始化图和任务图。设置是可以用构建状态中的其他 Keys
中存储的值生成特定构建键的新值的东西。sbt 将所有注册的 Setting[_]
对象转换为一个巨大的线性序列,并将其编译成一个任务图。然后使用此任务图来执行构建。
sbt 的所有加载语义都包含在 Load.scala 文件中。它大约如下所示
蓝色圆圈代表 sbt 加载项目时发生的 action。我们可以看到,sbt 在加载时执行以下操作
编译用户级项目(~/.sbt/<version>/
)
a. 加载此项目定义的任何插件(~/.sbt/<version>/plugins/*.sbt
和 ~/.sbt/<version>/plugins/project/*.scala
) b. 加载所有定义的设置(~/.sbt/<version>/*.sbt
和 ~/.sbt/<version>/plugins/*.scala
)
编译当前项目(<working-directory/project
)
a. 加载所有定义的插件(project/plugins.sbt
和 project/project/*.scala
) b. 加载/编译项目(project/*.scala
)
*.sbt
文件(build.sbt
及其朋友)。每个加载都定义了几个设置序列。该图显示了两个最重要的
buildSettings
- 这些是在 in ThisBuild
或直接针对 Build
对象定义的设置。它们在构建时初始化一次。您可以添加这些,例如在 build.sbt
文件中
ThisBuild / foo := "hi"
projectSettings
- 这些是特定于项目的设置。它们特定于构建中的特定子项目。插件可能会将其设置贡献给多个项目,在这种情况下,这些值将针对每个项目进行复制。您可以添加特定于项目的设置,例如在 project/build.scala
中
lazy val root = (project in file(".")).settings(...)
在加载/编译所有构建定义后,sbt 有一个 Seq[Setting[_]]
序列,它必须对其进行排序。如该图所示,sbt 的默认包含顺序为
~/.sbt/<version>/*.sbt
)build.sbt
)