繁体   English   中英

如何使用 maven 部署 JavaFX 项目,包括自定义和非模块化依赖项?

[英]How to deploy a JavaFX project with maven, including custom and non-modular dependencies?

我目前正在尝试部署我的 JavaFX 应用程序(使用 jar 或安装程序,但首选安装程序)。 我已经看到一些消息来源指向使用 jlink,但我试图无济于事。

虽然我可以正常使用 jlink 构建没有问题,但我正在尝试包含我使用 Maven 和 Java 17 制作的自定义序列化实用程序(没有 Z47A34A9D6CE8F6ECB970Z),但它是一个模块化的,带有 a6-info 的模块。 要将其导入我的项目,我只是将其添加为依赖项。 此外,这种依赖需要 SnakeYAML,我不认为这是一个模块化项目? (后面很重要)

现在,有了这种依赖关系,如果我尝试运行 javafx:jlink,我通常会收到类似“jlink 不适用于自动模块”的错误(参考我的序列化实用程序)。

我的设置:

  • JavaFX 17.0.1
  • JDK 17.0.1
  • Maven 3.8.4
  • IntelliJ IDEA 终极版

所以,我主要的两个问题:

  • 我是否应该为 jlink 而烦恼,特别是如果我想获得安装程序?
  • 对于像我的 JavaFX 项目这样的模块化项目,我如何添加来自其他模块化项目的依赖项(并且在序列化实用程序中,以某种方式遮蔽 SnakeYAML)并允许它们使用 JavaFX 进行编译?

提前致谢。

我是否应该为 jlink 而烦恼,特别是如果我想获得安装程序?

不。

您可以在此过程中使用 jlink,但根据我的经验,这不是必需的。 此外,jlink 创建的图像可能有点难以与 jpackage 所需的内容集成,无论如何您都需要使用它。

相反,如果您需要安装程序,请使用jpackage而不是jlink

jpackage 既可以链接你的应用程序,也可以创建安装程序,但 jlink 只能链接,不能创建安装程序。

对于像我的 JavaFX 项目这样的模块化项目,我如何添加来自其他模块化项目的依赖项(并且在序列化实用程序中,以某种方式遮蔽 SnakeYAML)并允许它们使用 JavaFX 进行编译?

包装时不要遮光jars,没有必要。 此外,如果 jars 是模块化的,它将破坏它们的模块化并且它们可能无法工作(例如 JavaFX jars 在遮蔽到 jar 时不受支持)。

要添加编译依赖,您已经在使用 Maven,只需使用其编译依赖机制即可。 现代的 maven 构建过程和 IDE 集成(至少是 Idea)将自动配置正确的路径来编译声明的依赖项,以便它们可以从模块路径中获得,如果它们是模块化的,并且 ZA2F2ED4F8EBC062CBB4C2Z 路径或自动模块,则作为自动模块它们不是模块化的。

在 package 中包含相关的 jars。 这可以通过两种方式完成:

  • 如果 jars 是模块化的,请将 jars 链接到 package 中包含的运行时映像:

    • jlink 和 jpackage 都可以做到这一点,但是在创建安装程序时,使用 jpackage 进行链接而不是 jlink,因为 jpackage 将确保映像中的所有文件都位于安装程序的正确位置,但 jlink 不会,根据我使用 Java 的经验 17工具。
  • 如果 jars 不是模块化的,则将它们包含在 package 的 lib 目录中。 在 package 中包含的应用程序启动脚本中,将非模块化库文件的 lib 目录放在 class 路径上,以便可以找到它们。

此外,这种依赖需要 SnakeYAML,我不认为这是一个模块化项目?

按照以下教程进行操作:

  • https://github.com/dlemmermann/JPackageScriptFX

    • JPackageScriptFX 的说明:

      演示项目如何使用脚本通过 jdeps、jlink 和 jpackage 工具构建其 JavaFX 应用程序的自包含、特定于平台的可执行文件和安装程序

      脚本不尝试创建完全模块化的解决方案,而是尝试启用现有项目/应用程序,这些项目/应用程序通常使用非模块化的第 3 方依赖项,以进行打包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM