0

我正在将我的 Swing 项目重写为 javafx,并在其中使用一些 jfoenix 控件。

eclipse中使用的VM参数

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

我的模块信息.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 是一个自动模块

现在我可以在我的 pom 中使用 maven-assembly-plugin 或 shade-plugin 制作 Runnable fat jar。但是在运行它时,我无法打开使用 jfoenix 组件的那些窗口。我已经在命令行中运行它在堆栈跟踪中得到了这些运行时错误

警告:不支持的 JavaFX 配置:从“未命名模块 @1506acf0”加载类java.lang.reflect" 到未命名的模块@1506acf0

尝试在命令行中使用 VM 参数运行但失败。

然后在我的 pom 中使用 javafx-maven-plugin 并将 VM 参数作为选项传递。现在我可以使用目标 javafx:ru​​n 运行它,但是 javafx:jlink 失败并且堆栈跟踪是

错误:自动模块不能与 jlink 一起使用:jasperreports from file:///home/user/.m2/repository/net/sf/jasperreports/jasperreports/6.17.0/jasperreports-6.17.0.jar [错误] 命令执行失败的。

我从https://github.com/moditect/moditect#generating-module-infojava-descriptors尝试了 moditect-plugin 。但是无法遵循它,也没有找到更详细的解释或示例。

有人请帮助我制作一个传递 VM 参数的胖 jar 或成功运行目标 javafx:jlink。

4

0 回答 0