Использование The Badass JLink plugin
Дано:
Есть приложение JavaFX, оформленное в виде gradle проекта
plugins {
id 'java'
id "application"
id "org.openjfx.javafxplugin" version "0.0.9"
}
group 'ru.cml'
version '0.1'
sourceCompatibility = 11
repositories {
jcenter()
mavenCentral()
mavenLocal()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.opencsv', name: 'opencsv', version: '5.2'
compile group: 'org.apache.commons', name: 'commons-math3', version: '3.0'
compile group: 'uk.me.berndporr', name:'iirj', version: '1.1'
}
javafx {
modules = ["javafx.controls", "javafx.fxml"]
version = "11.0.2"
}
run {
jvmArgs = ["--add-opens", "javafx.graphics/javafx.css=ALL-UNNAMED"]
}
mainClassName = "foot.ui.main/ru.cml.components.gui.entity.FootUI"
В таком виде всё кажется нормальным, gradlew build и gradlew run работают корректно.
Далее встаёт вопрос о том, чтобы данное приложение предоставить другим людям, причём, что важно, не имеющим на компьютере JRE. Для этого я сначала собрал всё в один fat jar, добавив в build.gradle следующие строки:
jar {
manifest {
attributes "Main-Class": "ru.cml.components.gui.entity.FootUI"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
При этом, после запуска gradlew build в директории ./build/libs обнаруживается желаемый jar-файл.
А далее, я пытаюсь использовать плагин Badass JLink Plugin:
plugins {
id 'org.beryx.jlink' version '2.21.4'
}
Дописывая кроме прочего в build.gradle следующее:
jlink {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
launcher{
name = 'FootUI'
jvmArgs = ["--add-opens", "javafx.graphics/javafx.css=ALL-UNNAMED"]
}
}
Содержимое моего файла module-info.java следующее:
module foot.ui.main {
exports ru.cml.components.gui.entity to javafx.graphics;
exports ru.cml.components.gui.controller to javafx.fxml;
requires opencsv;
requires iirj;
requires javafx.base;
requires javafx.controls;
requires javafx.fxml;
requires javafx.graphics;
opens ru.cml.components.gui.controller to javafx.fxml;
}
Как и прежде, сборка проходит успешно, однако при выполнении gradlew jlink возникает ошибка:
Error: Module foot.ui.main contains package org.apache.commons.math3.optimization.general, module ru.cml.merged.module exports package org.apache.commons.math3.optimization.general to foot.ui.main
Вопрос:
Почему так происходит и как бороться?