Open-source build tool for Scala and Java projects
sbt (originally simple build tool, nowadays stands for nothing) is an open-source build tool which can build Java, Scala, and Kotlin projects. It aims to streamline the procedure of constructing, compiling, testing, and packaging applications, libraries, and frameworks. sbt is highly adaptable, permitting developers to customize the build process according to their project's specific needs.
sbt provides a wide range of features to make the process of building and managing Scala projects easy and efficient. Some of the key features include:
sbt is the "de facto" build tool in the Scala community, used, for example, by the Scala 2 and Scala 3 compilers themselves, Play Framework, and Lichess, a popular chess server. The sbt project is "bootstrapped" — it uses sbt to build itself and considers dogfooding a positive feature.
History.
sbt was originally released as an open-source project by Mark Harrah in 2008. Over the years, it has evolved significantly through numerous releases, each introducing new features, bug fixes, and enhancements. Here is an overview of the significant releases, along with the key changes and innovations they introduced:
Build files.
An sbt build can be defined using a codice_1 file Below is an example of codice_2 build definition:
val scalaTest = "org.scalatest" %% "scalatest" % "3.2.14"
val akkaVersion = "2.6.20"
val akkaActor = "com.typesafe.akka" %% "akka-actor" % akkaVersion
val akkaCluster = "com.typesafe.akka" %% "akka-cluster" % akkaVersion
// Set the Scala version used by this build to 2.13.10.
ThisBuild / scalaVersion := "2.13.10"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
lazy val root = (project in file("."))
 .aggregate(helloCore)
 .dependsOn(helloCore)
 .settings(
 name := "Hello",
 // Add a single dependency, for tests.
 libraryDependencies += scalaTest % Test
lazy val helloCore = (project in file("core"))
 .settings(
 name := "Hello Core",
 libraryDependencies += scalaTest % Test,
 // Add multiple dependencies.
 libraryDependencies ++= List(akkaActor, akkaCluster)
Example use.
sbt may be invoked for each build command, or it may enter interactive mode if no command is given. To clean build products of the current build:
$ sbt clean
Multiple commands may be used on the same line. To run a single test named "Foo" and then publish exported jars:
$ sbt "testOnly Foo" publish
Extensibility and integration.
The functionality of sbt can be extended through a plugin architecture. Community-contributed plugins cover areas such as signing, packaging, publishing and releasing artifacts, connecting to other services such as blogs and databases, or integrating with other technologies.
Both IntelliJ IDEA and VS Code support sbt through their Scala plugins. In both those IDEs, it is possible to create a new project with initial sbt build files, as well as if the project already includes an sbt build file, it can be used to generate the project's configuration for the given IDE.
Comparisons.
The main alternatives for sbt among build tools are Gradle and Apache Maven, both established build tools for projects developed on the JVM platform. In the Scala ecosystem, another popular build tool is Mill. The choice between sbt, Gradle, Apache Maven, and Mill, depends on the specific requirements of your project and your familiarity with the tools. If you're working primarily with Scala, sbt or Mill might prove a better fit, while if you're working with multiple languages or technologies, one of the other two may be a better choice.
References.
 ;templatestyles src="Reflist/styles.css" / ;