Skip to content

Build and deploy JavaFX Applicationn with jlink

I have a script build.gradle, which created the IDEA development environment when creating a JavaFX project with Gradle support:

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.10'
    id 'org.beryx.jlink' version '2.24.4'
    id 'org.javamodularity.moduleplugin' version '1.8.10' apply false

group 'com.prototype'
version '1.0'

repositories {

ext {
    junitVersion = '5.8.2'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
    sourceCompatibility = '17'
    targetCompatibility = '17'

application {
    mainModule = 'com.prototype.simulationcrystalgrowth'
    mainClass = 'com.prototype.simulationcrystalgrowth.SimulationApplication'

javafx {
    version = '17.0.1'
    modules = ['javafx.controls', 'javafx.fxml', 'javafx.web']

dependencies {
    implementation('com.dlsc.formsfx:formsfx-core:11.4.2') {
        exclude(group: 'org.openjfx')
    implementation('net.synedra:validatorfx:0.2.1') {
        exclude(group: 'org.openjfx')
    implementation('eu.hansolo:tilesfx:17.0.11') {
        exclude(group: 'org.openjfx')


test {

jlink {
    imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip")
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'app'

jlinkZip {
    group = 'distribution'

After the “build” task is completed, the “distributions” folder appears in the build folder. It contains a zip archive with the following contents:

bin and lib folders

The bin folder contains two scripts, sh and bat. The lib folder contains, as I understand it, all the required jar modules. If JAVA_HOME is installed on Java 17 in my environment, then when executing the bat script, my program starts. I expected that jlink is a kind of analogue of a more user-friendly assembly and packaging of the application, which will help to create something like an exe application launcher.

I also noticed that there are no tasks related to jlink in build.gradle is not called during the build process using the “build” task. enter image description here

I tried to run them myself, and I got the same error: enter image description here

I am confused by the mention of the “distributions/app” path in build.gradle, I expect there should be something else after the build.

What am I doing wrong? What should I get at the output using jlink ?



The problem is solved.

The exclude of the org.openjfx module was removed from all dependencies.

Useful links: