Introduction to SBT
SBT (Simple Build Tool) is a popular build tool used with Scala and Java projects. In this article, we introduce SBT including what it is, how it works, and basic commands for using SBT with your project.
What is SBT?
SBT is an open source build tool for Scala and Java. SBT is written in Scala and is recognized as the de facto build tool for Scala projects. SBT is similar to other build tools like Ant and Maven but differs mainly in it's flexibility with project compilations. Using SBT, you can access the same dependencies that you can with Maven with the added advantage of incremental compilation, interactive shells, etc.
While SBT can be used with Scala and non-Scala projects alike, it is most commonly used with Scala projects because of it's seamless integration with Scala technologies.
How SBT works?
SBT follows the same basic directory structure as Maven:
src/
main/
resources/
scala/
java/
test/
resources/
scala/
java/
project/
build.properties
target/
build.sbt
The source code for an SBT project lives in the src/main/scala and src/main/java directories. Non-Java resources such as XML config files and other artifacts are included in the src/main/resources folder so they can be loaded as class path resources.
Like other traditional Java projects, all test files / resources live in a separate test/ directory.
The project/ directory houses helper objects and one-off plugins. It also defines a build.properties file specifying the SBT version to be used, making the project more portable. If the version specified is not available locally, the SBT launcher will download the correct version for you.
Build definition
At the root of an SBT project is the build.sbt file. This encapsulates the project's build definition and specifies things like project name, version, scala version, etc. The build.sbt file also includes managed dependencies and other custom defined tasks and settings for the project.
SBT Basic Commands
Below are some of the more common commands used with SBT:
sbt
starts an interactive SBT shell
run
runs the main class for the project
reload
reloads the project's build definition
compile
compiles the main sources in /main/scala/ and /main/java/ directories
clean
deletes all the generated files in the target/ directory
package
generates the jar file for the project
test
compiles and runs all the tests for the project
Conclusion
SBT is a flexible build tool for Scala and Java projects. You can use SBT in the same way you use Maven or Ant but with the added benefits of incremental compilation and custom configurations through code.