Создание и развертывание приложений JavaFX с помощью jlink

У меня есть скрипт build.gradle, который создавал среду разработки IDEA при создании проекта JavaFX с поддержкой Gradle:

      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 {
    mavenCentral()
}

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('org.controlsfx:controlsfx:11.1.1')
    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('org.kordamp.ikonli:ikonli-javafx:12.2.0')
    implementation('org.kordamp.bootstrapfx:bootstrapfx-core:0.4.0')
    implementation('eu.hansolo:tilesfx:17.0.11') {
        exclude(group: 'org.openjfx')
    }

    testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}

test {
    useJUnitPlatform()
}

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'
}

После выполнения задачи «сборка» в папке сборки появляется папка «дистрибутивы». Он содержит zip-архив со следующим содержимым:

Папка bin содержит два скрипта, sh и bat. Папка lib содержит, как я понял, все необходимые jar-модули. Если в моем окружении установлена ​​JAVA_HOME на Java 17, то при выполнении bat-скрипта запускается моя программа. Я ожидал, что jlink — это некий аналог более удобной сборки и упаковки приложения, который поможет создать что-то вроде exe лаунчера приложений.

Я также заметил, что в сборке нет задач, связанных с jlink. gradle не вызывается в процессе сборки с помощью задачи «сборка».

Я попытался запустить их сам, и я получил ту же ошибку:

Меня смущает упоминание пути «distributions/app» в build.gradle, я ожидаю, что после сборки должно быть что-то еще.

Что я делаю не так? Что я должен получить на выходе, используя jlink?

1 ответ

Проблема решена.

Исключениеorg.openjfxмодуль был удален из всех зависимостей.

Полезные ссылки:

https://openjfx.io/openjfx-docs/#градле

https://github.com/openjfx/образцы

https://developer.tizen.org/development/articles/openjdk-and-openjfx-installation-guide

Другие вопросы по тегам