在应用程序包中包含JVM的副本

时间:2016-06-24 19:29:15

标签: java objective-c xcode jvm nsbundle

我有一个OS X objective-c应用程序,它以编程方式调用Java命令来运行Java程序。

如果我是正确的,默认情况下不会在OS X上安装Java。我想发送我的应用程序,而不是强迫用户下载Java才能使用该应用程序。

如何发送java可执行文件的副本以及运行时(rt.jar)。当然我可以在应用程序包中复制rt.jar当然但是java二进制文件呢?我也可以复制一下吗?

3 个答案:

答案 0 :(得分:1)

我认为在您的情况下,最好的选择是包含Java Installer内核(如果需要,可以下载并安装最新版本的Java的小型安装)。

在您的应用中捆绑二进制文件的主要问题基本上是安全性。在JRE中经常发现漏洞并修补漏洞。如果捆绑特定版本并在发布后发现漏洞,则基本上会削弱安装应用程序的计算机的安全性。由于您显然不想这样做,最好尝试包含逻辑来检测是否存在兼容版本,或以其他方式正确安装正确版本。许多安装程序包包括以下选项:例如,OpenOffice / LibreOffice是本机应用程序,但它们需要存在Java,并且它们使用与上述类似的安装方法。

答案 1 :(得分:1)

每个独立的应用程序包都包含以下项目:

应用程序代码,打包成一组JAR文件,以及任何其他应用程序资源(数据文件,本机库)

JRE的副本,仅供此应用程序使用

应用程序的本机启动程序,支持单个程序包的多个启动程序

元数据,例如图标

可以使用多种包格式。为多种类型的包提供内置支持。您还可以通过对打包为文件夹的自包含应用程序进行后处理来组装自己的包,例如,如果要将应用程序分发为ZIP文件。

-

自包含的应用程序包具有以下缺点:

"下载并运行"用户体验

与Web部署不同,用户体验不是关于从网络启动应用程序。"它更像是下载,安装和运行等等。进程,用户可能需要执行其他步骤才能启动应用程序。例如,用户可能必须接受浏览器或操作系统安全性对话框,或从下载文件夹中查找并启动应用程序安装程序。

下载量更大

通常,自包含应用程序包的大小大于独立应用程序的大小,因为包含了JRE的私有副本。

每个目标平台的包

独立应用程序包是特定于平台的,只能为您构建的同一系统生成。要在Windows,Linux和OS X上提供自包含的应用程序包,您必须在所有三个平台上构建项目。

应用程序更新是开发人员的责任

Web部署的Java应用程序会在Web可用时自动从Web下载应用程序更新。 Java Autoupdate机制负责每年多次将JRE更新到最新的安全版本。自包含应用程序没有内置支持自动更新。

答案 2 :(得分:0)

您可以使用自己的应用发送JRE(请参阅licensing)。要向用户提供JRE的副本,请将其放入并让他们自己安装或make a application bundle