使用jpackage打包集成ControlsFX的JavaFX项目时遭遇模块未找到异常
jpackage打包集成ControlsFX的JavaFX项目时遭遇模块未找到异常
看起来你遇到的问题主要是jpackage参数配置错误和ControlsFX模块名称误用导致的,我来帮你一步步解决:
首先,分析错误根源
你当前的命令有两个关键问题:
- 重复使用了
--module-path参数:jpackage中--module-path只能声明一次,多个路径需要用分号(Windows系统)分隔,你写了两次--module-path,后面的会直接覆盖前面的,导致JavaFX的jmods路径没被正确识别,同时ControlsFX的路径也没生效。 - 模块名称写错了:ControlsFX 11+的官方模块名是
org.controlsfx.controls,而不是你写的controlsfx,这才是java.lang.module.FindException的直接原因。
解决方案:修正jpackage命令
把你的命令改成下面这样,重点注意--module-path的合并和模块名的修正:
jpackage --input C:\...\target --add-modules javafx.controls,org.controlsfx.controls --module-path "C:\...\openjfx-20.0.1_windows-x64_bin-jmods\javafx-jmods-20.0.1;C:\..\controlsfx" --win-console --dest c:\test --main-jar tests-1.0-SNAPSHOT.jar --main-class tests.App
注意:Windows下如果路径包含空格,一定要用双引号把整个
--module-path的内容括起来,避免命令解析出错。
额外的配置检查
如果修正命令后还是有问题,你需要检查项目的模块化配置:
- 如果你的项目是模块化项目(存在
module-info.java):
一定要在module-info.java中声明对ControlsFX模块的依赖,比如:module tests { requires javafx.controls; requires org.controlsfx.controls; exports tests; // 根据你的主类所在包调整导出规则 } - 如果是非模块化项目:
确保ControlsFX的jar文件已经被正确放置在--input指定的target目录中,或者通过--module-path明确指向它所在的文件夹,同时保持--add-modules中的模块名正确。
版本兼容提醒
另外,虽然ControlsFX 11.1.2理论上兼容JavaFX 20,但如果后续遇到奇怪的兼容性问题,可以尝试使用和JavaFX大版本匹配的ControlsFX版本,或者升级到最新的ControlsFX稳定版。
备注:内容来源于stack exchange,提问作者droid
相关产品推荐
相关产品推荐

