如何打包 Java 桌面应用程序?将 JVM 捆绑到您的应用程序中已编译的本机应用 Java Web Start 逐步淘汰
我正在开发一个简单的桌面java应用程序。我想让它尽可能无缝地为最终用户安装。例如,类似于Minecraft的分发方式 - OS X的简单可执行文件和Windows的EXE文件。
我应该使用什么工具?
我正在开发一个简单的桌面java应用程序。我想让它尽可能无缝地为最终用户安装。例如,类似于Minecraft的分发方式 - OS X的简单可执行文件和Windows的EXE文件。
我应该使用什么工具?
Java 应用程序的用户必须安装 JRE 才能运行它。
你可以告诉他们先安装 Java,或者像 Processing 那样随你的应用一起分发 JRE。
但是,请注意,如果将 JRE 包含在其中,则打包的程序将很重。而且,如果您想这样做,用户将需要下载适用于其平台的适当软件包。
它们将您的 Java 应用程序作为输入,并将它们包装在可执行文件中(对于指定的平台)。您可以根据需要自定义它们;如果用户没有安装Java,下载页面将打开。
一些例子是Launch4J,JSmooth和Jar2EXE。
它们是独立的应用程序,配置为将应用文件复制到用户的计算机并(可选)创建快捷方式。
一些安装程序是用Java编写的,所以它们是多平台的。在本例中,安装程序是 .
其他一些是依赖于平台的,但您具有不需要包装它们的优势。.jar
Java安装程序:IzPack,Packlet,PackJacket,Antigen,...
这是一项 Java 功能,可让您的用户轻松运行您的应用程序。你给他们一个文件,
他们打开它,Java下载最新版本的应用程序并运行它。没有包装麻烦!.jnpl
请参阅此处的完整资源列表。
部署基于 Java 的桌面应用的现代解决方案是将 JVM 与应用捆绑在一起,作为可双击的包交付给用户,就像其他“普通”应用一样。将 JVM 视为要合并到最终应用中的另一个依赖项。
了解:
你可以通过这种方式发布一个JavaFX(OpenJFX)应用程序,以及一个Swing应用程序(JavaFX的前身)。
这种方法的一个优点是,您可以确切地知道用于运行特定应用程序的JVM。当然,这也意味着当 JVM 更新包含相关修复时,您必须发布应用程序的新版本。您的用户不再关心下载、安装和升级 JVM,因为这项工作现在是开发人员的责任。
此方法的一个缺点是,您必须构建、测试和分发应用的单独二进制文件,每个平台(macOS、MS Windows、BSD、Linux 等)一个二进制文件。
另请参阅我对相关问题的答案,如何在Java 11中使用jdk而不使用jre。
请参阅Will Iverson的答案,了解一些有用的工具。
此方法的一个前沿变体是使用 GraalVM 及其本机映像生成器构建应用的提前编译(与 JIT 相比)本机代码版本。
可能相关:Oracle的Project Leyden。请参阅Mark Reinhold的初始公告,并查看本文,2020-05-07。
其他一些答案讨论了Java Web Start。请注意,Java Web Start和Java Applets技术都被Oracle逐步淘汰。请参阅他们的白皮书,Java客户端路线图更新,日期为2020-05-11。
一个可能的替代方法是Java Web Start的开源实现,称为OpenWebStart项目。