如何打包Java桌面应用程序?

Nik*_*las 11 java distribution

我正在研究一个简单的桌面java应用程序.我想尽可能无缝地为最终用户安装.例如,类似于Minecraft的分布方式 - OS X的简单可执行文件和Windows的EXE文件.

我应该使用什么工具?

Alb*_*dez 13

啊哈!我也有这个问题.Java应用程序的用户必须安装JRE才能运行它.
您可以告诉他们首先安装Java,或者像处理一样在您的应用程序中分发JRE. 但请注意,如果包含JRE,则打包的程序会很重.而且,如果您想这样做,用户将需要为他们的平台下载适当的包.

可执行的Java Wrappers

它们将您的Java应用程序作为输入并将它们包装在可执行文件中(对于指定的平台).您可以根据需要自定义它们; 如果用户没有安装Java,则会打开下载页面.

一些例子是Launch4J,JSmoothJar2EXE.
 

安装程序

它们是独立的应用程序,配置为应用程序文件复制到用户的计算机,并(可选)创建快捷方式.

有些安装程序是用Java编写的,因此它们是多平台的.在这种情况下,安装程序是.jar.
其他一些是依赖于平台的,但您的优势在于您不需要包装它们.

Java安装程序: IzPack,Packlet,PackJacket,Antigen,...
 

Java Web Start

它是一项Java功能,允许用户轻松运行您的应用程序.你给他们一个.jnpl文件,
他们打开它,Java下载最新版本的应用程序并运行它.没有包装麻烦!


请在此处查看完整的资源列表.


Bas*_*que 10

在您的应用程序中捆绑 JVM

部署基于 Java 的桌面应用程序的现代解决方案是将JVM与您的应用程序捆绑在一起,像其他“普通”应用程序一样作为可双击的包交付给用户。将 JVM 视为要合并到最终应用程序中的另一个依赖项。

学习关于:

您可以通过这种方式发布JavaFX ( OpenJFX ) 应用程序以及Swing应用程序(JavaFX 的前身)。

这种方法的一个优点是您确切地知道正在使用什么 JVM 来运行您的特定应用程序。当然,这也意味着当 JVM 更新包含相关修复时,您必须发布应用程序的新版本。您的用户不再关心下载、安装和升级 JVM,因为这些琐事现在由开发人员负责。

这种方法的一个缺点是您必须构建、测试和分发应用程序的单独二进制文件,每个平台(macOS、MS Windows、BSD、Linux 等)一个。

另请参阅对相关问题的回答How to use jdk without jre in Java 11

请参阅Will Iverson答案以了解一些有用的工具。

编译的原生应用

虚拟机

这种方法的一个前沿变体是使用GraalVM及其本机图像生成器构建应用程序的提前编译(与JIT相比)本机代码版本。

莱顿计划

可能相关:Oracle 的 Project Leyden。请参阅Mark Reinhold 的初始公告,以及2020-05-07 的这篇文章

Java Web Start淘汰

其他一些答案讨论了Java Web Start。请注意,Oracle 正在逐步淘汰Java Web StartJava Applets技术。请参阅他们的白皮书,日期为 2020 年 5 月 11日的Java 客户端路线图更新

一个可能的替代方案是 Java Web Start 的开源实现,称为OpenWebStart项目。


jjc*_*hiw 5

Java Web Start我认为是您正在寻找的选项...

编辑

来自 Basil Bourque @ 2020 的评论:

Oracle 正在逐步淘汰 Java Web Start。请参阅他们的白皮书,日期为 2020 年 5 月 11日的 Java 客户端路线图更新。您可能对称为OpenWebStart项目的 Java Web Start 的开源实现感兴趣 。