Создание и развертывание приложений 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