如何使用Jpackage制作JavaFX应用的分发格式
How to use Jpackage to make a distribution format for JavaFX applications
由于 .jar 不再是用于分发我们的 JavaFX 项目的最佳格式,我愿意为此使用工具 JPackage,但在阅读此 post 之后: ,我最终有多个问题,但首先,我只想确保我已经很好地理解了我应该遵循的过程:
过程:
1-创建模块化项目
2-将项目打包成.jar格式
3-使用工具Jlink创建自定义的运行-时间图像(减少输出的大小)
4-使用工具jpackage(输入2和3)
我也想知道我是否可以依靠 Intellij 工件来创建 .jar 文件(第 2 步)使用特定插件更好吗?
最后不清楚的是我们是否需要在 .jar 文件中包含依赖项?因为我相信它们会包含在定制的 运行 时间里,不是吗?
如果您看一下 here,这里有关于如何从包含 Maven 插件的模板开始创建 JavaFX 项目的说明,以便使用 jlink.[=16 轻松打包应用程序=]
这样做可以让你完全依赖 IntelliJ,让事情变得更简单。
获得运行时映像后,您可以使用 jpackage
打包它。已经有关于此主题的讨论 。
这里是 link 到 the article mentioned there. The article there shows it using Gradle, but you can do the same with Maven, just use the appropriate plugin (jpackage-maven-plugin, as stated in 的快速
。
此外,从我在您的评论中看到的内容来看,您似乎同时具有模块化和非模块化依赖性。在那种情况下,您可以使用 jdeps
来实现您需要的。 nice article here 关于混合依赖性,它专门使用 JavaFX 作为非模块化应用程序中模块化库的示例。
只需在此处 https://github.com/dlemmermann/JPackageScriptFX 查看带有工作示例的教程。它对非模块化项目特别有用。
jpackage
工具不需要模块化项目。尽管如果您的项目不是模块化的,那么由于 JavaFX 是模块化的,您的项目将是混合的。在这种情况下,您将 JavaFX 模块添加到自定义 运行 时间图像,同时告诉 jpackage
将您的代码视为非模块化(即它将配置可执行文件以将您的代码放在class-路径).
您也可以将第 3 步和第 4 步合并为一个步骤。 jpackage
工具可以生成自定义 运行 时间图像。它将在“幕后”使用 jlink
。
至于你的代码需要是什么格式,在我看来,将它打包成一个JAR文件是最直接的。但我不确定这是否严格 必需。
您的应用程序的任何依赖项当然都需要包含在最终应用程序中。如果这些依赖项是模块化的,那么您可以通过自定义 运行-time 图像包含它们。但是,如果您希望它们位于 class 路径上,那么您可以按照与代码相同的方式包含它们(即 --input
)。
请注意 jpackage
工具有一个用户指南:https://docs.oracle.com/en/java/javase/16/jpackage/packaging-overview.html
我使用了 jpackage maven 插件来构建本机可执行文件(https://search.maven.org/artifact/org.panteleyev/jpackage-maven-plugin)。
您首先必须使用 maven-javafx-plugin 创建 jlink 运行时映像 (https://github.com/openjfx/javafx-maven-plugin)。
然后,您将在 jpackage plugin(...) 中使用该运行时映像。然后应该成功创建一个可执行文件。
由于 .jar 不再是用于分发我们的 JavaFX 项目的最佳格式,我愿意为此使用工具 JPackage,但在阅读此 post 之后:
过程:
1-创建模块化项目
2-将项目打包成.jar格式
3-使用工具Jlink创建自定义的运行-时间图像(减少输出的大小)
4-使用工具jpackage(输入2和3)
我也想知道我是否可以依靠 Intellij 工件来创建 .jar 文件(第 2 步)使用特定插件更好吗?
最后不清楚的是我们是否需要在 .jar 文件中包含依赖项?因为我相信它们会包含在定制的 运行 时间里,不是吗?
如果您看一下 here,这里有关于如何从包含 Maven 插件的模板开始创建 JavaFX 项目的说明,以便使用 jlink.[=16 轻松打包应用程序=]
这样做可以让你完全依赖 IntelliJ,让事情变得更简单。
获得运行时映像后,您可以使用 jpackage
打包它。已经有关于此主题的讨论
这里是 link 到 the article mentioned there. The article there shows it using Gradle, but you can do the same with Maven, just use the appropriate plugin (jpackage-maven-plugin, as stated in
此外,从我在您的评论中看到的内容来看,您似乎同时具有模块化和非模块化依赖性。在那种情况下,您可以使用 jdeps
来实现您需要的。 nice article here 关于混合依赖性,它专门使用 JavaFX 作为非模块化应用程序中模块化库的示例。
只需在此处 https://github.com/dlemmermann/JPackageScriptFX 查看带有工作示例的教程。它对非模块化项目特别有用。
jpackage
工具不需要模块化项目。尽管如果您的项目不是模块化的,那么由于 JavaFX 是模块化的,您的项目将是混合的。在这种情况下,您将 JavaFX 模块添加到自定义 运行 时间图像,同时告诉 jpackage
将您的代码视为非模块化(即它将配置可执行文件以将您的代码放在class-路径).
您也可以将第 3 步和第 4 步合并为一个步骤。 jpackage
工具可以生成自定义 运行 时间图像。它将在“幕后”使用 jlink
。
至于你的代码需要是什么格式,在我看来,将它打包成一个JAR文件是最直接的。但我不确定这是否严格 必需。
您的应用程序的任何依赖项当然都需要包含在最终应用程序中。如果这些依赖项是模块化的,那么您可以通过自定义 运行-time 图像包含它们。但是,如果您希望它们位于 class 路径上,那么您可以按照与代码相同的方式包含它们(即 --input
)。
请注意 jpackage
工具有一个用户指南:https://docs.oracle.com/en/java/javase/16/jpackage/packaging-overview.html
我使用了 jpackage maven 插件来构建本机可执行文件(https://search.maven.org/artifact/org.panteleyev/jpackage-maven-plugin)。 您首先必须使用 maven-javafx-plugin 创建 jlink 运行时映像 (https://github.com/openjfx/javafx-maven-plugin)。 然后,您将在 jpackage plugin(...) 中使用该运行时映像。然后应该成功创建一个可执行文件。