Savant Build System

A modern, dependency-aware build system for Java

$ curl -sL savantbuild.org/install | bash
Read the Docs

Fast Builds

Groovy DSL build files that are simple and declarative. No painful plugin management.

Dependency Management

Fully SemVer compliant. Handles the most complex dependency graphs with ease.

Plugin System

Plugins provide reusable logic without injecting targets. You control the build flow.

Build files are simple

build.savant
project(group: "org.example",
        name: "my-app",
        version: "1.0.0",
        licenses: ["ApacheV2_0"])

java = loadPlugin(
  id: "org.savantbuild.plugin:java:1.0.0")
java.settings.javaVersion = "17"

target(name: "compile",
       description: "Compiles the project") {
  java.compile()
}

target(name: "test",
       description: "Runs the tests",
       dependsOn: ["compile"]) {
  java.test()
}
Terminal
$ sb compile
Compiling [main] sources
Compiling [test] sources

$ sb test
Running tests
All 42 tests passed

$ sb jar
Building [build/jars/my-app-1.0.0.jar]

What is Savant?

Savant is a modern build tool that uses a Groovy DSL for the build files. Savant is fully SemVer compliant and handles the most complex dependency graphs easily. Savant uses a plugin approach to quickly add complex build logic to a project.

The main difference between Savant and other build systems is that Savant does not allow plugins to add targets to the build. This decision makes Savant declarative and simplifies the entire system by removing the need to manage inter-plugin dependencies (i.e. the JUnit plugin depends on the Java plugin).

If you are interested in learning more about this design decision, check out the Plugin Doc Page