全局设置 onLoad
的类型为 State => State
且在所有项目构建并加载后仅执行一次。有一个类似的钩子 onUnload
用于在项目卸载时使用。
项目卸载通常是 reload
命令或 set
命令的结果。由于 onLoad
和 onUnload
钩子是全局的,因此修改此设置通常需要使用先前值来组合新的函数。以下示例展示了定义 onLoad
的基本结构。
假设您想在启动时运行名为 dependencyUpdates
的任务。以下是如何操作:
lazy val dependencyUpdates = taskKey[Unit]("foo")
// This prepends the String you would type into the shell
lazy val startupTransition: State => State = { s: State =>
"dependencyUpdates" :: s
}
lazy val root = (project in file("."))
.settings(
ThisBuild / scalaVersion := "2.12.6",
ThisBuild / organization := "com.example",
name := "helloworld",
dependencyUpdates := { println("hi") },
// onLoad is scoped to Global because there's only one.
Global / onLoad := {
val old = (Global / onLoad).value
// compose the new transition on top of the existing one
// in case your plugins are using this hook.
startupTransition compose old
}
)
您可以使用此技术来切换启动子项目。