JReleaser is a release automation tool. Its goal is to simplify creating releases and publishing artifacts to multiple package managers while providing customizable options. However you may use it with projects that do not require publishing binary assets.

What it does

JReleaser takes inputs from popular builds tools (Apache Ant, Apache Maven, Gradle) such as JAR files, binary distributions (.zip, .tar), JLink images, or any other file that you’d like to publish as a Git release on popular Git services such as GitHub, GitLab, or Gitea. Distribution files can additionally be published to be consumed by popular package managers as Homebrew, Snapcraft, Scoop, or get ready to be launched via JBang. Releases may be announced in a variety of channels such as Twitter, Zulip, Sdkman, and others. Have a look at the listed integrations.

jreleaser tools

How does it work

A release process can be customized with a jreleaser.[yml|toml|json] file if using the cli CLI or ant Apache Ant options, or direct DSL configuration inside a pom.xml (maven Apache Maven) or build.gradle (gradle Gradle) file.

Once setup, you can create a new release by invoking the full-release command or any other commands described in the Workflow.

Every step of the release process is configurable. Inputs may be parameterized externally; several input files may be provided as templates.

Where does it run

You can run JReleaser at your local development machine or at any of the supported CI/CD services.

How it looks

A (moving) picture is worth a thousand words


JReleaser is heavily inspired by GoReleaser, it also builds on top of the lessons learned from JBang's original build setup. Since July 2021 JBang’s releases are now posted via JReleaser.