![](/img/trans.png)
[英]What do I need to build JDK 9 project with non-modular dependencies using Maven
[英]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 不适用于自动模块”的错误(参考我的序列化实用程序)。
我的设置:
所以,我主要的两个问题:
提前致谢。
我是否应该为 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 中包含的运行时映像:
如果 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.