You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX 21模块化应用:如何将H2、Hibernate自动模块加入类路径

问题:JavaFX 21模块化应用打包时如何处理H2与Hibernate自动模块?

在使用JLink将JavaFX 21模块化应用打包为原生可执行文件时,如何将H2和Hibernate这类自动模块加入类路径?

我尝试将两个JAR包放入resources目录,同时修改module-info.java配置静态依赖:

module module-name {
    requires static com.h2database;
    requires static org.hibernate.orm.core;
    opens package-name.model to org.hibernate.orm.core;
    opens package-name.interfaces to org.hibernate.orm.core;
}

我希望了解在模块化应用中,如何通过类路径处理自动模块的相关问题。

此前得到回复,但如果移除上述requires和opens语句,Hibernate会因不可见导致构建失败。我使用Maven进行构建,jpackage命令如下:

jpackage --dest output --name %1 --type msi --module-path "%PATH_TO_FX_JMODS%;./target/%jarName%" --add-modules %4 --module %5 --win-shortcut --win-menu --win-menu-group %1 --java-options -Xmx2048m --vendor %3 --copyright "Copyright © %year% %3" --icon src/main/resources/package-name/images/icon.ico --app-version %2

根据回复内容,我整理出以下理解:

开发与打包阶段

  • 应用能正常运行,是因为将H2和Hibernate作为自动模块使用

运行阶段(通过jpackage)

  • 无法运行的原因是jpackage依赖的jlink不支持自动模块依赖

解决方案

不推荐构建非完全模块化的项目,可选方案如下:

  1. 按照官方建议将项目改为非模块化应用
  2. 尽可能将自动模块转换为标准模块,实现完全模块化:
    • 手动方式:
      • 使用jdeps生成module-info
      • 修改生成的module-info(如配置exports等规则)
      • 用javac编译module-info
      • 通过--file参数手动更新JAR包
    • Gradle的Badass jlink插件:可将非模块化依赖合并为单个JAR并自动生成module-info,方便用jlink创建运行时镜像(注:可能不适用于所有软件)
    • Maven的Moditect插件:可分析项目并自动生成module-info,检测依赖与包导出内容(不推荐使用)

内容的提问来源于stack exchange,提问作者2023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:30:13