我正在将我的 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:run 运行它,但是 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。