我正在做一个简单的桌面java应用程序。我想让它尽可能无缝地为最终用户安装。eidogg.类似于Minecraft的分发方式-一个简单的OS X可执行文件和Windows EXE文件。我应该使用什么工具?
8xiog9wr1#
Java应用程序的用户必须安装JRE才能运行它。您可以告诉他们先安装Java,或者像Processing那样将JRE随应用一起分发。但是,请注意,如果你的打包程序中包含JRE,那么它会很重。而且,如果你想这样做,用户需要下载适合他们平台的软件包。
它们把你的Java应用程序作为输入,并把它们 Package 在一个可执行文件中(对于一个特定的平台)。如果用户没有安装Java,则会打开下载页面。例如Launch4J、JSmooth和Jar2EXE。
它们是独立的应用程序,配置为将您的应用程序文件 * 复制 * 到用户的计算机上,并(可选)创建快捷方式。有些安装程序是用Java编写的,所以它们是多平台的,在本例中,安装程序是.jar。还有一些是依赖于平台的,但您有一个优势,即不需要 Package 它们。
.jar
Java安装程序:IzPack、Packlet、PackJacket、Antigen等
这是Java的一个特性,可以让你的用户轻松运行你的应用。你给予他们一个.jnpl文件,他们打开它,Java下载你的应用程序的最新版本并运行它。没有打包的麻烦!请参阅完整的资源列表here。
.jnpl
jljoyd4f2#
部署基于Java的桌面应用的现代解决方案是将JVM与您的应用捆绑在一起,像其他"普通"应用一样作为可双击的包交付给用户。可以将JVM视为最终应用中要包含的另一个依赖项。了解:
您可以通过这种方式发布JavaFX(OpenJFX)应用程序,以及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及其native image generator构建应用的提前编译(相对于JIT)原生代码版本。莱登计划可能相关:甲骨文公司的莱顿项目,见初始announcement by Mark Reinhold,见this article,2020 - 05 - 07。
其他一些答案讨论 * Java Web Start 。请注意, Java Web Start * 和 * Java小程序 * 技术都将被Oracle逐步淘汰。请参阅他们的白皮书Java Client Roadmap Update,日期为2020年5月11日。一个可能的替代方案是Java Web Start的开源实现,称为OpenWebStart项目。
ajsxfq5m3#
我认为Java Web Start是您正在寻找的选项...
Basil Bourque@2020的评论:Java Web Start正在被Oracle逐步淘汰。请参阅他们的白皮书Java Client Roadmap Update(日期:2020年5月11日)。您可能会对Java Web Start的开源实现(称为OpenWebStart项目)感兴趣。
iibxawm44#
**编辑:**Java Plug-In是applet和Java Web Start所必需的,在Java 9中被弃用,并几乎同时从浏览器中删除。因此,此答案已过时。仅将其保留在此以警告人们不要使用此路径。
带GUI的跨平台应用程序的最佳安装可以在Java Web Start中找到。引用链接文档的部分内容:JWS提供了许多吸引人的特性,包括但不限于闪屏、**桌面集成、**文件关联、自动更新......
..启动软件的操作系统特定方式。添加一个快捷方式(带图标)到桌面或开始/程序菜单(桌面集成)是平台特定的,因为你可以得到。..将在没有Java的情况下运行,并提供安装JRE(如果当前不存在)使用deployJava.js,链接在“另请参阅:”下倒数第二个列表项中。如果JWS集成在其中,看起来像一个本地程序,那么您不需要每个操作系统都有一个单独的软件包。使用原生PLAF将是一个良好的开端。
deployJava.js
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
efzxgjgh6#
你在找这样的东西吗:http://www.regexlab.com/en/jar2exe/?它允许最终用户运行.exe而不安装。
zy1mlcev7#
有许多选项- Java Web Start、第三方安装程序等。请查看http://mindprod.com/jgloss/installer.html以获得解释。
aemubtdh8#
我认为您正在寻找IzPak,甚至还有一个GUI,名为PackJacket
x7rlezfr9#
到2022年,有了一个新的选项Hydraulic Conveyor,它有一系列的特性,对于发布JVM桌面应用程序非常有用:
所以,如果你想发布一个JVM桌面应用程序,它会帮你解决问题。还有一些示例展示了如何发布使用JavaFX和Jetpack Compose for Desktop的应用程序。
9条答案
按热度按时间8xiog9wr1#
Java应用程序的用户必须安装JRE才能运行它。
您可以告诉他们先安装Java,或者像Processing那样将JRE随应用一起分发。
但是,请注意,如果你的打包程序中包含JRE,那么它会很重。而且,如果你想这样做,用户需要下载适合他们平台的软件包。
可执行Java Package
它们把你的Java应用程序作为输入,并把它们 Package 在一个可执行文件中(对于一个特定的平台)。如果用户没有安装Java,则会打开下载页面。
例如Launch4J、JSmooth和Jar2EXE。
安装人员
它们是独立的应用程序,配置为将您的应用程序文件 * 复制 * 到用户的计算机上,并(可选)创建快捷方式。
有些安装程序是用Java编写的,所以它们是多平台的,在本例中,安装程序是
.jar
。还有一些是依赖于平台的,但您有一个优势,即不需要 Package 它们。
Java安装程序:IzPack、Packlet、PackJacket、Antigen等
Java Web启动
这是Java的一个特性,可以让你的用户轻松运行你的应用。你给予他们一个
.jnpl
文件,他们打开它,Java下载你的应用程序的最新版本并运行它。没有打包的麻烦!
请参阅完整的资源列表here。
jljoyd4f2#
在应用程序中捆绑JVM
部署基于Java的桌面应用的现代解决方案是将JVM与您的应用捆绑在一起,像其他"普通"应用一样作为可双击的包交付给用户。可以将JVM视为最终应用中要包含的另一个依赖项。
了解:
您可以通过这种方式发布JavaFX(OpenJFX)应用程序,以及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项目。
ajsxfq5m3#
我认为Java Web Start是您正在寻找的选项...
Basil Bourque@2020的评论:
Java Web Start正在被Oracle逐步淘汰。请参阅他们的白皮书Java Client Roadmap Update(日期:2020年5月11日)。您可能会对Java Web Start的开源实现(称为OpenWebStart项目)感兴趣。
iibxawm44#
**编辑:**Java Plug-In是applet和Java Web Start所必需的,在Java 9中被弃用,并几乎同时从浏览器中删除。因此,此答案已过时。仅将其保留在此以警告人们不要使用此路径。
带GUI的跨平台应用程序的最佳安装可以在Java Web Start中找到。引用链接文档的部分内容:
JWS提供了许多吸引人的特性,包括但不限于闪屏、**桌面集成、**文件关联、自动更新......
其他事项
..启动软件的操作系统特定方式。
添加一个快捷方式(带图标)到桌面或开始/程序菜单(桌面集成)是平台特定的,因为你可以得到。
..将在没有Java的情况下运行,并提供安装JRE(如果当前不存在)
使用
deployJava.js
,链接在“另请参阅:”下倒数第二个列表项中。如果JWS集成在其中,看起来像一个本地程序,那么您不需要每个操作系统都有一个单独的软件包。
使用原生PLAF将是一个良好的开端。
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
efzxgjgh6#
你在找这样的东西吗:
http://www.regexlab.com/en/jar2exe/
?
它允许最终用户运行.exe而不安装。
zy1mlcev7#
有许多选项- Java Web Start、第三方安装程序等。
请查看http://mindprod.com/jgloss/installer.html以获得解释。
aemubtdh8#
我认为您正在寻找IzPak,甚至还有一个GUI,名为PackJacket
x7rlezfr9#
到2022年,有了一个新的选项Hydraulic Conveyor,它有一系列的特性,对于发布JVM桌面应用程序非常有用:
所以,如果你想发布一个JVM桌面应用程序,它会帮你解决问题。还有一些示例展示了如何发布使用JavaFX和Jetpack Compose for Desktop的应用程序。