环境:使用maven进行javaFX项目构建,JDK版本:11
使用IDEA创建一个maven工程,然后编辑依赖如下:
配置maven依赖
<!-- 依赖的版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>11</maven.compiler.release>
<maven.compiler.version>3.9.0</maven.compiler.version>
<javafx.version>11</javafx.version>
<javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
</properties>
<!-- javaFX依赖 -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>${javafx.version}</version>
</dependency>
<!-- maven插件依赖 -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>${javafx.maven.plugin.version}</version>
<type>maven-plugin</type>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<type>maven-plugin</type>
</dependency>
插件配置
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.release}</source>
<target>${maven.compiler.release}</target>
</configuration>
</plugin>
<!-- javafx maven插件配置 ,因为需要客户端runtime的支持,此处需要配置入口,不配置会报错-->
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<!-- 程序启动入口-->
<mainClass>ry.main.SearchMain</mainClass>
<!-- 镜像名 -->
<jlinkImageName>rySearch</jlinkImageName>
<!-- 启动vm参数配置 -->
<commandlineArgs>-Xmx1024m</commandlineArgs>
</configuration>
</plugin>
</plugins>
启动类vm参数配置
PATH_TO_FX 为环境变量,该环境变量指向 javaFX的SDK文件夹。
附上SDK下载路径:https://gluonhq.com/products/javafx/
我下载的windows版本,下载完成在IDEA或者windows中配置好环境变量后就可以在启动类中添加如下VM参数
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml
之后编写代码,启动应用即可
启动类代码如下:
package ry.main;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
* 搜索服务启动类
*/
public class SearchMain extends Application {
public void start(Stage stage) throws Exception {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
启动运行效果如下:
附上jlink客户端运行时的maven插件配置:
maven插件支持的命令参考如下:
javafx:运行选项
该插件默认包括: -module-path和-add-modules选项-classpath。
或者,可以使用以下方式修改配置:
mainClass: 主类,全限定名,带或不带模块名
workingDirectory: 当前工作目录
skip: 跳过执行。值:假(默认),真
outputFile: 重定向进程输出的文件
options:传递给可执行文件的 VM 选项列表。
commandlineArgs: 执行程序的参数用空格分隔
includePathExceptionsInClasspath:解析模块路径时,将此值设置为 true 将包括在类路径中生成路径异常的依赖项。默认情况下,该值为 false,并且不会包含这些依赖项。
runtimePathOption:默认情况下,插件会将每个依赖项放在模块路径或类路径上(基于某些因素)。设置配置后runtimePathOption,插件会将所有依赖项放在模块路径或类路径上。
如果设置为MODULEPATH,则需要模块描述符。所有依赖项都需要模块化或包含 Automatic-Module-Name。
如果设置为CLASSPATH,则需要一个 Launcher 类(如这个)来运行 JavaFX 应用程序。此外,如果存在模块信息描述符,它将被忽略。
值:MODULEPATH 或 CLASSPATH。
该插件使用“jdk”工具支持 Maven 工具链。
jlink运行时支持的其他命令参考如下:
javafx:jlink 选项
jlink可以设置相同的命令行选项:
stripDebug: 去除调试信息。值:假(默认)或真
stripJavaDebugAttributes:去除 Java 调试属性(从 Java 13 开始),值:false(默认)或 true
compress:正在使用的资源的压缩级别。值:0(默认)、1、2。
noHeaderFiles:删除includes生成的运行时映像中的目录。值:假(默认)或真
noManPages:删除man生成的运行时映像中的目录。值:假(默认)或真
bindServices:添加绑定服务的选项。值:假(默认)或真
ignoreSigningInformation:添加忽略签名信息的选项。值:假(默认)或真
jlinkVerbose:添加详细选项。值:假(默认)或真
launcher:添加具有给定名称的启动器脚本。
如果options已定义,这些将作为 vm 选项传递给启动器脚本。
如果commandLineArgs已定义,这些将作为命令行参数传递给启动器脚本。
jlinkImageName:带有生成的运行时映像的文件夹的名称
jlinkZipName:设置后,创建生成的运行时映像的 zip
jlinkExecutable:jlink可执行文件。它可以是完整路径或可执行文件的名称(如果它在 PATH 中)。
jmodsPath: 使用本地 JavaFX SDK 时,设置本地 JavaFX jmods 的路