beryx/badass-jlink-plugin

Create a custom runtime image of your modular application

Groovy

423

838 commits

updated Oct 13, 2026

See the code

README

PRs Welcome License Build Status

NOTE: Looking for co-maintainers - see this issue.

Using this Gradle plugin you can create a custom runtime image of your modular application with minimal effort, even if it depends on automatic modules. The plugin also lets you create an application installer with the jpackage tool introduced in Java 14 (see fxgl-sliding-puzzle for a usage example).

💡 For non-modular applications use the Badass-Runtime plugin.

Badass-JLink exposes an extension with the name jlink to let you configure various aspects of its operation. A simple example configuration is shown below:

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    includeLocales = ['en', 'de-DE']
    includeLocalesFile = file('src/packaging/locales.txt')
    launcher{
        name = 'hello'
        jvmArgs = ['-Dlog4j.configurationFile=./log4j2.xml']
    }
}

includeLocales and includeLocalesFile configure locale filtering for jlink. Tags must be valid BCP 47 locale tags and are normalized/deduplicated by the plugin.

This is a complex plugin. Please read the documentation before using it.

The following projects illustrate how to use this plugin to create custom runtime images:

See the list of all releases if you use an older version of this plugin.

gradle
gradle-plugin
jigsaw
jlink
jpackage
runtime-image

beryx/badass-jlink-plugin

Create a custom runtime image of your modular application

Groovy

423

838 commits

updated Oct 13, 2026

See the code

README

PRs Welcome License Build Status

NOTE: Looking for co-maintainers - see this issue.

Using this Gradle plugin you can create a custom runtime image of your modular application with minimal effort, even if it depends on automatic modules. The plugin also lets you create an application installer with the jpackage tool introduced in Java 14 (see fxgl-sliding-puzzle for a usage example).

💡 For non-modular applications use the Badass-Runtime plugin.

Badass-JLink exposes an extension with the name jlink to let you configure various aspects of its operation. A simple example configuration is shown below:

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    includeLocales = ['en', 'de-DE']
    includeLocalesFile = file('src/packaging/locales.txt')
    launcher{
        name = 'hello'
        jvmArgs = ['-Dlog4j.configurationFile=./log4j2.xml']
    }
}

includeLocales and includeLocalesFile configure locale filtering for jlink. Tags must be valid BCP 47 locale tags and are normalized/deduplicated by the plugin.

This is a complex plugin. Please read the documentation before using it.

The following projects illustrate how to use this plugin to create custom runtime images:

See the list of all releases if you use an older version of this plugin.

gradle
gradle-plugin
jigsaw
jlink
jpackage
runtime-image

Significant stargazers

Tesla Zhang‮

4,083 followers · starred Nov 2021

Michael Dowling

935 followers · starred Apr 2019

Kengo TODA

300 followers · starred Apr 2023

Grzegorz Piwowarek

682 followers · starred Nov 2024