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

ldioqlga  于 2023-02-28  发布在  Java
关注(0)|答案(9)|浏览(225)

我正在做一个简单的桌面java应用程序。我想让它尽可能无缝地为最终用户安装。eidogg.类似于Minecraft的分发方式-一个简单的OS X可执行文件和Windows EXE文件。
我应该使用什么工具?

8xiog9wr

8xiog9wr1#

Java应用程序的用户必须安装JRE才能运行它。
您可以告诉他们先安装Java,或者Processing那样将JRE随应用一起分发
但是,请注意,如果你的打包程序中包含JRE,那么它会很重。而且,如果你想这样做,用户需要下载适合他们平台的软件包。

可执行Java Package

它们把你的Java应用程序作为输入,并把它们 Package 在一个可执行文件中(对于一个特定的平台)。如果用户没有安装Java,则会打开下载页面。
例如Launch4JJSmoothJar2EXE

安装人员

它们是独立的应用程序,配置为将您的应用程序文件 * 复制 * 到用户的计算机上,并(可选)创建快捷方式。
有些安装程序是用Java编写的,所以它们是多平台的,在本例中,安装程序是.jar
还有一些是依赖于平台的,但您有一个优势,即不需要 Package 它们。

Java安装程序:IzPackPackletPackJacketAntigen

Java Web启动

这是Java的一个特性,可以让你的用户轻松运行你的应用。你给予他们一个.jnpl文件,
他们打开它,Java下载你的应用程序的最新版本并运行它。没有打包的麻烦!
请参阅完整的资源列表here

jljoyd4f

jljoyd4f2#

在应用程序中捆绑JVM

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

您可以通过这种方式发布JavaFXOpenJFX)应用程序,以及Swing应用程序(JavaFX的前身)。
这种方法的一个优点是,你可以确切地知道运行你的应用程序所使用的JVM。当然,这也意味着,当JVM更新包含相关修复时,你必须发布新版本的应用程序。你的用户不再关心下载、安装和升级JVM,因为这些杂事现在是开发人员的责任。
这种方法的一个缺点是,您必须构建、测试和分发单独的应用二进制文件,每个平台(macOS、MS Windows、BSD、Linux等)一个。
另请参见my Answer的相关问题How to use jdk without jre in Java 11
请参阅Answer by Will Iverson,了解一些看起来很有用的工具。

编译的本机应用程序

GraalVM

这种方法的一个前沿变体是使用GraalVM及其native image generator构建应用的提前编译(相对于JIT)原生代码版本。
莱登计划
可能相关:甲骨文公司的莱顿项目,见初始announcement by Mark Reinhold,见this article,2020 - 05 - 07。

* Java Web Start * 逐步淘汰

其他一些答案讨论 * Java Web Start 。请注意, Java Web Start * 和 * Java小程序 * 技术都将被Oracle逐步淘汰。请参阅他们的白皮书Java Client Roadmap Update,日期为2020年5月11日。
一个可能的替代方案是Java Web Start的开源实现,称为OpenWebStart项目。

ajsxfq5m

ajsxfq5m3#

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

    • 编辑**

Basil Bourque@2020的评论:
Java Web Start正在被Oracle逐步淘汰。请参阅他们的白皮书Java Client Roadmap Update(日期:2020年5月11日)。您可能会对Java Web Start的开源实现(称为OpenWebStart项目)感兴趣。

iibxawm4

iibxawm44#

**编辑:**Java Plug-In是applet和Java Web Start所必需的,在Java 9中被弃用,并几乎同时从浏览器中删除。因此,此答案已过时。仅将其保留在此以警告人们不要使用此路径。

带GUI的跨平台应用程序的最佳安装可以在Java Web Start中找到。引用链接文档的部分内容:
JWS提供了许多吸引人的特性,包括但不限于闪屏、**桌面集成、**文件关联、自动更新......

其他事项

..启动软件的操作系统特定方式。
添加一个快捷方式(带图标)到桌面或开始/程序菜单(桌面集成)是平台特定的,因为你可以得到。
..将在没有Java的情况下运行,并提供安装JRE(如果当前不存在)
使用deployJava.js,链接在“另请参阅:”下倒数第二个列表项中。
如果JWS集成在其中,看起来像一个本地程序,那么您不需要每个操作系统都有一个单独的软件包。
使用原生PLAF将是一个良好的开端。

piv4azn7

piv4azn75#

如果您使用的是Java 16,jlink和jpackage将完成您所需要的工作--构建桌面应用程序和安装程序。
这是一个GitHub模板,它使用Maven来构建一个小型/精简的JVM + JavaFX应用程序。它使用Java模块和jlink来生成小型JVM,但使用普通的类路径来运行应用程序。GitHub Actions用于生成macOS、Windows和Linux的安装程序。
https://github.com/wiverson/maven-jpackage-template
这是模板的另一个(WIP)版本,它下面有一个小Swing UI和Sping Boot -没有JavaFX。
https://github.com/wiverson/desktop-spring-boot

efzxgjgh

efzxgjgh6#

你在找这样的东西吗:
http://www.regexlab.com/en/jar2exe/

它允许最终用户运行.exe而不安装。

zy1mlcev

zy1mlcev7#

有许多选项- Java Web Start、第三方安装程序等。
请查看http://mindprod.com/jgloss/installer.html以获得解释。

aemubtdh

aemubtdh8#

我认为您正在寻找IzPak,甚至还有一个GUI,名为PackJacket

x7rlezfr

x7rlezfr9#

到2022年,有了一个新的选项Hydraulic Conveyor,它有一系列的特性,对于发布JVM桌面应用程序非常有用:

  • 它为Windows/Mac/Linux创建自更新软件包,在Windows上使用MSIX,在macOS上使用Sparkle,在Linux上使用原生软件包管理器。
  • 它可以从任何操作系统运送到任何操作系统,即您可以从Linux运送到Mac/Windows,或从Mac运送到Windows/Linux等。
  • 它为每个操作系统运行jlink。
  • 它提供了二进制启动器(没有批处理文件或shell脚本),这些启动器以有用的方式设置JVM环境,比如为安装目录、更新站点URL计算系统属性。
  • 应用程序可以在后台更新,对于Mac/Windows安装,如果有新版本可用,您可以强制应用程序在启动时自动更新,就像Web应用程序一样。
  • 它为您处理代码签名和公证。
  • 它会为您的用户生成一个下载页面,并可以使用GitHub Releases作为下载和更新站点。

所以,如果你想发布一个JVM桌面应用程序,它会帮你解决问题。还有一些示例展示了如何发布使用JavaFX和Jetpack Compose for Desktop的应用程序。

相关问题