A global setting onLoad
is of type State => State
and is executed once, after all projects are built and loaded. There is a similar hook onUnload
for when a project is unloaded.
Project unloading typically occurs as a result of a reload
command or a set
command. Because the onLoad
and onUnload
hooks are global, modifying this setting typically involves composing a new function with the previous value. The following example shows the basic structure of defining onLoad
.
Suppose you want to run a task named dependencyUpdates
on start up. Here’s what you can do:
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
}
)
You can use this technique to switch the startup subproject too.