如何在 JavaFX 21 模块化应用程序中使用 JLink(以便打包为本机可执行文件),
将自动模块 H2 和 Hibernate 放在类路径中,如本视频中所述,
有相应的代码示例吗?
我尝试在资源中添加2个jar,并将相应的requires module-info更改为static:
我的模块信息:
module fr.softsf.sudofx2024 {
requires javafx.controls;
requires javafx.fxml;
requires org.controlsfx.controls;
requires com.dlsc.formsfx;
requires org.apache.logging.log4j;
requires org.apache.logging.log4j.core;
requires static com.h2database;
requires static org.hibernate.orm.core;
requires jakarta.persistence;
requires jakarta.validation;
opens fr.softsf.sudofx2024.model to org.hibernate.orm.core;
opens fr.softsf.sudofx2024.interfaces to org.hibernate.orm.core;
opens fr.softsf.sudofx2024 to javafx.fxml;
exports fr.softsf.sudofx2024;
opens fr.softsf.sudofx2024.view to javafx.fxml;
exports fr.softsf.sudofx2024.view;
}
我想了解如何使用模块化应用程序中的类路径来管理与自动模块相关的问题。
如果自动模块的 jar 文件位于类路径中,则它们不是自动模块,它们只是从类路径加载的类。因此,它们不应在模块信息中作为模块引用,也不应作为命令行参数引用的模块。
开发时,应确保所需的软件(不是正确模块的库)位于类路径中。一般来说,Maven、Gradle 等与 IDE 集成的工具会自动确保这一点。
构建部署包时,您应该包含要放置在发行版中的类路径上的 jar 文件(例如,使用 Maven 组装工具)。您可以将它们放置在程序集创建的 lib 目录中。该程序集可以压缩 jlink 映像中的所有内容,包括要放置在类路径上的库。然后,用于启动应用程序的脚本需要将参数添加到 java 命令以找到 lib 目录中的 lib 文件。
考虑使用 jpackage 而不是 jlink 是否更好,因为 jlink 对于处理非模块化软件的打包有特定的参数。