java - 将多个 javaFX 应用程序打包到一个 native 包中

标签 java deployment javafx

高级:我正在开发一个我希望自动更新的 JavaFX 应用

我看过的东西:

我遇到的问题:尝试将两个单独的 javafx native 可执行文件打包到一个包中。

描述: 我创建了一个 JavaFX UI 应用程序,它在启动时检查更新版本。该应用程序通过为每个操作系统(Liux、Windows 和 OSX)构建 native (使用 jfx 打包程序)包来交付。

如果有可用的更新版本,应用会将所需的更新下载到临时文件夹中。

为了更新自身,应用在技术上需要覆盖它自己的一些文件。虽然这可以在 Linux 和 OSX 上执行,但 Windows 会在主应用程序运行时锁定我需要更新的所有 jar 文件。

为了解决这个问题,我创建了一个我会下载的小型“更新程序”应用程序。我的主要应用程序将下载所有更新和更新应用程序。然后主应用程序将启动更新程序并自行终止。

更新程序会不断尝试更新该应用程序文件(这是在某种循环中,以防主应用程序关闭需要一段时间)。

一旦更新程序完成,它会简单地调用正确的主程序的可执行文件并完成更新。

这行得通...但是:为了运行我的更新程序应用程序,我依赖客户端机器上的 java(并且有正确的启动版本)。使用 javafx native 打包程序的全部意义在于确保 JRE 与应用程序一起分发,并且不依赖于任何本地版本。

我想尝试破解:

  • 不是让我的更新程序成为一个普通的 jar(java 应用程序)。我可以使更新程序成为我本地打包的 JavaFX 应用程序。
  • 然后我会手动从更新程序中取出生成的 native 可执行文件,然后将其与我的主应用程序一起分发。
  • 由于主要可执行文件和更新程序可执行文件的文件夹结构相同,我希望这两个可执行文件可以搭载在一个捆绑的 JRE 上

黑客只适用于 OSX - 在 windows 和 linux 上都有本地配置文件,可执行文件依赖这些文件来调用正确的 java 文件。

有什么办法可以解决这个问题吗?有什么方法可以强制打包器输出自定义“package.cfg”(在 Windows 的情况下),这将允许我捆绑两个可执行文件?

我知道这是一个远景,但任何建议将不胜感激。

最佳答案

我可能在将执行我想要的操作的代码包含在 javapackager 中之前问了我的问题。

简而言之,现在可以使用 JDK 1.8 版本中的 javapackager > 60(我现在使用的是 74)

这是官方 oracle 文档的链接:Oracle Doc

也可以使用 Maven 构建您的 JavaFX 应用程序以通过以下方式获得辅助启动器:javafx-maven-plugin

关于java - 将多个 javaFX 应用程序打包到一个 native 包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017130/

相关文章:

JavaFX - 设置 LocalDateTime 的方法不起作用

java - 如何在 Java API 中使用生成的 H2O 自动编码器/异常检测模型进行推理?

java - 如何将堆栈传递给方法

java - 无法序列化 Jackson xml 中的 OffsetDateTime

java - 在 Eclipse 中添加 JPA 连接

JavaFX 窗口未立即打开

java - 部署一个基于 Spring 的 WAR,其 JAR 依赖项已外部化

deployment - Heroku - 我可以从 Procfile 调用 Maven 吗?

java - 将缺少的驱动程序添加到生产中的遗留项目中

java - XYChart.Data getNode() 为空