如何分发Java应用程序

如何分发Java应用程序,java,jar,cross-platform,jvm,distribution,Java,Jar,Cross Platform,Jvm,Distribution,我想知道分发Java应用程序的各种选项 我知道你可以 分发源代码,让用户自己编译,或者提供make文件等 将其打包到一个JAR中,并具有自解压的归档 (我敢肯定,还有无数其他方式) 我希望得到一些关于最常见选项(我还没有想到的)的解释,特别是,它们是否要求用户拥有JVM,或者是否可以与JVM捆绑在一起?就个人而言,我不太喜欢由于缺少JVM而停止安装的安装程序。谁说应用程序需要安装程序,独立解决方案也可以 此外,值得一提的是如何处理跨平台分发、exe与dmg等问题 我提出这个问题的主要动机(我

我想知道分发Java应用程序的各种选项

我知道你可以

  • 分发源代码,让用户自己编译,或者提供make文件等
  • 将其打包到一个JAR中,并具有自解压的归档
  • (我敢肯定,还有无数其他方式)
我希望得到一些关于最常见选项(我还没有想到的)的解释,特别是,它们是否要求用户拥有JVM,或者是否可以与JVM捆绑在一起?就个人而言,我不太喜欢由于缺少JVM而停止安装的安装程序。谁说应用程序需要安装程序,独立解决方案也可以

此外,值得一提的是如何处理跨平台分发、exe与dmg等问题

我提出这个问题的主要动机(我理解这一点与其他问题类似)是找到不需要用户已经安装JVM的解决方案——但为了完整性,我一般都会这样问

非常感谢

分发源代码并让 用户自己编译,或者 提供制作文件等

这对于开源项目来说可能还可以,但对于任何商业项目来说都是非常不寻常的。我建议将其作为技术人员的一种选择,但也分发JAR

把它装进罐子里

我认为这是最好的做法

并且有自解压的档案

那改成呢

我希望你能解释一下 最常见的选择(以及个人的I 没有想到)特别是, 他们是否要求用户拥有JVM, 或者可以和一个捆绑在一起- 就我个人而言,我不太喜欢 安装程序由于缺少数据而停止 JVM

我认为捆绑JRE是不合法的。尽管如此,基于java的解决方案显然离不开java。OpenOffice和许多其他软件在没有安装JRE的情况下无法安装。我认为这是可以理解的

似乎是创建基于Java的安装程序的一个很好的解决方案

这是我的主要动机 问题(我很感激)是 与其他类似)是为了找到 不需要用户的解决方案 已经安装了JVM


正如我所写的,我认为捆绑JRE是不合法的[更新:它是合法的,仅供参考](而且也不是一个好的选择,因为您必须捆绑许多不同的操作系统/体系结构组合)。因此,唯一的其他方法是本机编译(抱歉,这对您没有帮助)。

一般来说,您有几个选择:

1) Java Web Start
2) Run it as an applet
3) download and install.

您主要对选项3感兴趣。您可以为各种安装程序(InstallJammer是其中之一,但您还有其他安装程序)创建安装包。由于您考虑的是分发JVM(您可以这样做),因此针对每个目标平台,您将考虑不同的安装程序。

对于简单的产品,我希望获得一个可执行的jar。看

对于任何大型产品,都需要安装程序。(InstallAnywhere、Install4J、LzPack等将帮助您创建一个应用程序)

允许您轻松分发Java应用程序并捆绑JVM(尽管它本身不需要Java,所以正如您所提到的,您永远不会出错,因为最终用户在机器中没有JVM)。这是一个商业产品(diclaimer,我是最初的开发者),但我们对小型ISV有折扣,对开源项目有免费许可证。MySQL/Oracle、Jaspersoft、Alfresco、Pentaho和其他一些ISV都在使用基于Java的工具,这些应用程序已经被下载了数百万次,没有出现重大问题。试试看:)

独立应用程序 在现代Java中,您可以为特定的主机操作系统生成一个带有捆绑JVM的独立应用程序

有关背景信息,请阅读Oracle白皮书,更新日期为2020-05

模块化 首先,模块化您的应用程序以支持。你可以在书籍、演示视频和许多博客文章中了解这一点

模块化的好处之一是,捆绑的JDK可以被剥离,只包括您在应用程序中实际使用的部分。这导致使用更少的存储和内存

获取一个Java实现 其次,获得一个Java实现,其许可条款满足您的需要。条款各不相同。有些是免费的,有些是商业产品

这是我制作的流程图,以帮助您选择

构建最终应用程序 第三,使用和等工具构建独立应用程序

这一过程的工具正在迅速发展。因此,可能会有更多的工具进入市场

捆绑的JDK具有针对特定主机操作系统的本机代码。因此,您需要为选择支持的每个部署平台单独构建应用程序

顺便说一句,请务必检查应用程序中包含的每个库的许可条款

备选方案:GraalVM
使用的本机代码的替代方法。这是最前沿的技术,所以要小心,但很有希望。

+1用于可执行JAR。如果您需要补充文件或特殊VM参数(就像我对使用外部DLL的应用程序所做的那样),请为Windows提供批启动文件-.bat,或为linux/unix提供.sh,并将其打包到单个zip文件中。安装只需提取拉链即可。谢谢。从您的链接中,我还发现了JSmooth,它声称:“如果没有发现使用JSmooth的虚拟机[…]:包装器可以将它们重定向到网页,甚至更好,它们可以建议用户自动下载并安装Java环境”。你会说,安装了JRE后,JARs的最佳实践仍有可能优于这样的解决方案吗?@Adam不,这听起来更好,谢谢。很遗憾Sun/Oracle没有做过这样的事情。不过,我认为jar足以满足绝大多数情况。@SeanPatrickFloyd,作为
jar
isn分发