Как преобразовать автоматический модуль в явный модуль

Я переписываю свой проект 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.

0 ответов

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