非模块化Maven项目引入javafx.web遇jdk.jsobject缺失错误求解
JavaFX 26.0.1非模块化项目引入javafx.web启动报错解决方案
问题根源
JavaFX 26.0.1版本中,jdk-jsobject被重构为模块化JAR文件,而非模块化项目启动时,JVM默认仅从类路径加载资源,不会自动识别模块化JAR的模块声明。而javafx.web依赖jdk.jsobject模块,导致启动层初始化时找不到该模块,抛出java.lang.module.FindException。
解决方案
无需转为模块化项目,只需调整Maven配置,在启动时显式告知JVM加载jdk.jsobject模块,即可兼容非模块化旧依赖的场景。
步骤1:修改javafx-maven-plugin配置
在项目POM的javafx-maven-plugin中添加vmArgs参数,指定加载jdk.jsobject模块:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.nowhere.mavenprojectseven.App</mainClass> <!-- 添加VM参数,显式加载jdk.jsobject模块 --> <vmArgs>--add-modules jdk.jsobject</vmArgs> </configuration> </execution> </executions> </plugin>
步骤2:(可选)显式声明jdk-jsobject依赖
虽然依赖树中已包含该依赖,但显式声明能确保版本一致性,避免潜在依赖冲突:
<dependencies> <!-- 原有javafx依赖 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>26.0.1</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>26.0.1</version> </dependency> <!-- 显式添加jdk-jsobject运行时依赖 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>jdk-jsobject</artifactId> <version>26.0.1</version> <scope>runtime</scope> </dependency> </dependencies>
验证
执行命令 mvn clean javafx:run,项目应能正常启动,不再出现模块找不到的错误。
补充说明
JavaFX 26.x系列对模块化支持进行了调整,部分辅助依赖转为模块化,但非模块化项目仍可通过显式指定模块加载参数正常运行,无需强制重构为模块化结构。
内容的提问来源于stack exchange,提问作者Peter Hull
相关产品推荐
相关产品推荐

