部署至捆绑JavaFX的JVM时,如何配置JavaFX项目的Maven POM?
针对预安装OpenJFX的JVM环境的Maven POM配置方案
一、依赖配置:让OpenJFX仅在开发阶段可用
将OpenJFX相关依赖的<scope>设为provided,Maven会在编译、测试阶段加载这些依赖,但不会把它们打包进最终JAR。因为目标环境的JVM已经自带OpenJFX,运行时会直接从系统JVM中获取这些类库。
修改后的依赖片段:
<dependencies> <!-- OpenJFX依赖设为provided,仅开发阶段使用 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>20.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>20.0.2</version> <scope>provided</scope> </dependency> <!-- ControlsFX若目标环境未预装,保留默认compile范围,会被打包进JAR --> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.1.2</version> </dependency> <!-- JUnit测试依赖保持不变 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency> </dependencies>
二、javafx-maven-plugin配置:仅生成普通JAR
原配置中的jlinkZipName、jlinkImageName等参数用于生成捆绑JVM的镜像包,需要移除这些参数,只保留运行应用所需的基础配置。同时添加maven-jar-plugin,配置生成包含主类信息的普通可执行JAR(若不需要可执行JAR,可仅保留基础打包配置)。
修改后的插件配置片段:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>20</source> <target>20</target> </configuration> </plugin> <!-- 配置maven-jar-plugin生成普通可执行JAR --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>work.basil.voters.voters_wa.HelloApplication</mainClass> </manifest> </archive> </configuration> </plugin> <!-- javafx-maven-plugin仅保留运行应用的配置,移除jlink相关参数 --> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>work.basil.voters.voters_wa/work.basil.voters.voters_wa.HelloApplication</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
完整修改后的POM文件
<?xml version="1.0" encoding="UTF-8"?> <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"> <modelVersion>4.0.0</modelVersion> <groupId>work.basil.voters</groupId> <artifactId>voters_wa</artifactId> <version>1.0-SNAPSHOT</version> <name>Voters WA</name> <description>Parses Washington State voter registration data, then providing access via queries and reporting. For political purposes only. Commercial use of that data is prohibited by law.</description> <inceptionYear>2023</inceptionYear> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.plugin.validation>VERBOSE</maven.plugin.validation> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>20.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>20.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.1.2</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>20</source> <target>20</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>work.basil.voters.voters_wa.HelloApplication</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>work.basil.voters.voters_wa/work.basil.voters.voters_wa.HelloApplication</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
内容的提问来源于stack exchange,提问作者Basil Bourque
相关产品推荐
相关产品推荐

