Как преобразовать автоматический модуль в явный модуль
Я переписываю свой проект Swing на javafx и использую в нем некоторые элементы управления jfoenix.
Аргументы виртуальной машины, используемые в eclipse
--add-opens=java.base/java.lang.reflect=com.jfoenix
--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix
--add-exports javafx.base/com.sun.javafx.binding=com.jfoenix
--add-exports javafx.graphics/com.sun.javafx.stage=com.jfoenix
--add-exports javafx.base/com.sun.javafx.event=com.jfoenix
мой pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>Sarams</groupId>
<artifactId>Sarams</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar </packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<configuration>
<mainClass>saramsfx.Main</mainClass>
<options>
<option>--add-opens</option>
<option>java.base/java.lang.reflect=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.base/com.sun.javafx.binding=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.graphics/com.sun.javafx.stage=com.jfoenix</option>
<option>--add-exports</option>
<option>javafx.base/com.sun.javafx.event=com.jfoenix</option>
</options>
<commandlineArgs>-Xmx1024m</commandlineArgs>
<stripDebug>true</stripDebug>
<compress>2</compress>
<noHeaderFiles>true</noHeaderFiles>
<noManPages>true</noManPages>
<launcher>saramsfx.sh</launcher>
<jlinkImageName>sarams</jlinkImageName>
<jlinkZipName>saramszip</jlinkZipName>
<includePathExceptionsInClasspath>true</includePathExceptionsInClasspath>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>16</release>
</configuration>
</plugin>
</plugins>
<finalName>Saramsfx</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>18-ea+1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>17-ea+11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>17-ea+14</version>
</dependency>
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>9.0.10</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.17.0</version>
</dependency>
<dependency>
<groupId>clojure-interop</groupId>
<artifactId>java.awt</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>clojure</artifactId>
<version>1.11.0-alpha1</version>
</dependency>
<dependency>
<groupId>org.controlsfx</groupId>
<artifactId>controlsfx</artifactId>
<version>11.1.0</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics</artifactId>
<version>18-ea+1</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>jcenter</id>
<name>jcenter</name>
<url>https://jcenter.bintray.com</url>
</repository>
<repository>
<id>Clojars</id>
<name>Clojars</name>
<url>https://clojars.org/repo/</url>
</repository>
</project>
мой модуль-info.java
module Sarams {
requires javafx.controls;
requires javafx.fxml;
requires java.sql;
requires javafx.graphics;
requires javafx.base;
requires org.apache.commons.lang3;
requires java.scripting;
requires javafx.web;
requires java.base;
requires jasperreports;
requires java.desktop;
requires javafx.media;
requires com.jfoenix;
requires org.bouncycastle.provider;
opens saramsfx to javafx.graphics, javafx.base, javafx.fxml, javafx.controls, java.lang.reflect;
exports saramsfx;
}
были jasperreports - это автоматический модуль
Теперь я могу создать Runnable fat jar, используя maven-assembly-plugin или shade-plugin в моем pom, но я не могу открыть те окна, в которых используются компоненты jfoenix. Я запустил его в командной строке, получил эти ошибки в трассировке стека
ПРЕДУПРЕЖДЕНИЕ: неподдерживаемая конфигурация JavaFX: классы были загружены из 'безымянного модуля @ 1506acf0' java.lang.reflect.InaccessibleObjectException: невозможно сделать логическое java.lang.reflect.AccessibleObject.setAccessible0 (логическое) доступным: модуль java.base не открывается java.lang.reflect "в безымянный модуль @ 1506acf0
попытался запустить с аргументами виртуальной машины в командной строке, но потерпел неудачу.
Затем использовал javafx-maven-plugin в моем pom и передал аргументы виртуальной машины в качестве параметров. Теперь я могу запустить его, используя цель javafx: run, но не смог выполнить javafx:jlink, и трассировка стека
Ошибка: автоматический модуль нельзя использовать с jlink: jasperreports из файла: ///home/user/.m2/repository/net/sf/jasperreports/jasperreports/6.17.0/jasperreports-6.17.0.jar [ОШИБКА] Выполнение команды не удалось.
Я попробовал moditect-plugin из https://github.com/moditect/moditect#generating-module-infojava-descriptors . Но не смогли уследить за этим и не нашли более подробного объяснения или примера.
Кто-нибудь, пожалуйста, помогите мне либо создать толстую банку, передающую аргументы виртуальной машины, либо успешно запустить javafx:jlink.