Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用特定的JRE交付Java应用程序?_Java - Fatal编程技术网

如何使用特定的JRE交付Java应用程序?

如何使用特定的JRE交付Java应用程序?,java,Java,有人知道如何将特定的JRE与已编译的Java应用程序打包在一起吗?我目前有一个可执行的jar文件,希望将JRE 6 Update 31放入其中。因此,无论客户端安装了哪个JRE版本,应用程序都会使用附带的JRE。解决方案应该独立于平台工作 有什么想法吗?非常感谢 您需要特定于平台的启动器,这些启动器使用放置在JAR文件旁边的JRE。当然,您可以使用批处理文件和shell脚本来实现这一点,但是有更专业的解决方案可以创建本机启动器,例如。(免责声明:我公司开发install4j)。免费的解决方案是。

有人知道如何将特定的JRE与已编译的Java应用程序打包在一起吗?我目前有一个可执行的jar文件,希望将JRE 6 Update 31放入其中。因此,无论客户端安装了哪个JRE版本,应用程序都会使用附带的JRE。解决方案应该独立于平台工作


有什么想法吗?非常感谢

您需要特定于平台的启动器,这些启动器使用放置在JAR文件旁边的JRE。当然,您可以使用批处理文件和shell脚本来实现这一点,但是有更专业的解决方案可以创建本机启动器,例如。(免责声明:我公司开发install4j)。免费的解决方案是。

您可以使用java webstart部署它,它允许您下载jre的特定版本(如果不存在)。然而,我不知道降级是否可能。Java也必须已经安装。

如果您计划分发此捆绑包(您的应用程序+JRE),那么有一个实用程序,它是一个功能强大的多平台Java安装程序生成器,可以为Java应用程序生成本机安装程序和应用程序启动器。

这是不可能的。要使之成为可能,您必须为每个平台下载VM。对于windows,将JRE复制到目录和jar中,并通过shell脚本调用分布式JVM。但这太难了,Cthulhu描述的解决方案是最好的,即检查版本并指向网页

不过,您可能会查看一些

JSmooth-


Jar2Exe-

我们在生产商业产品时也遇到了同样的情况。我们已经下载了特定版本的windows和linux JRE,并使用将其与应用程序打包在一起

如果要安装应用程序,必须安装“我们的”JRE,并且无论系统安装了哪些JRE或JDK,该应用程序都由该JRE运行

缺点是:安装程序是为Windows或Linux制作的,大小约为50 MB。打开包装时模块的尺寸为:

  • 应用程序本身~5MB
  • libs~10 MB
  • JRE~90mb
如果我想让它更“独立于平台”,我必须打包这两个JRE,安装程序的容量大约为100 MB。它仍然只适用于两种类型的平台(见Cthulhu的答案)


请注意,我们主要通过SSH进行远程安装,并且使用压缩选项会将包时间至少增加约10倍(从几分钟增加到几十分钟)。

如果您在目标平台上安装了jre,例如Windows 64位,只需复制Java安装中
jre
文件夹下的所有内容,并将其放在发行版中即可。然后创建一个批处理文件以指向本地jre而不是系统jre

以下是我的工作:

  • 我的jar文件位于
    dist
    文件夹中
  • 将系统
    jre
    文件夹复制到
    dist\jre-win-1.7.0\u 04
  • 创建一个.bat文件,其中包含以下行
    jre-win-1.7.0_04\bin\java.exe-jar MyProgram.jar
……轰,完成!双击批处理文件,它将使用本地jre运行jar文件。为了证明这一点,请卸载系统jre并双击批处理文件。仍然有效

您可以在Linux或OSX上以类似的方式执行此操作

我还想指出,这是一种相当普遍的做法,许多Java发行版都是这样做的。所以,不要说你不能或不应该


然而,有一些警告。在我的示例Windows x64中,这确实使您的发行版更大,并且依赖于平台。然而,它是可行的和可管理的。jre支持的平台数量有限,猜猜看。。。他们也依赖于平台。

在OSX上,他们正在从苹果提供Java转向甲骨文提供Java,这也意味着Java不会安装在新安装的OSX上。Oracle提供了打包Java安装的工具,他们强烈建议在安装过程中提供jre。这样做的好处是,客户不必安装额外的软件包来运行应用程序,您可以根据正确的Java运行时测试应用程序,并确保在发货前没有不稳定性。缺点是构建安装程序稍微复杂一点,而且下载量更大

当然,如果您想为Windows、Linux和ectera提供应用程序,构建安装程序会变得更加复杂,只提供一个可执行jar会简单得多,但这不是客户想要的体验。客户不希望能够下载一个应用程序并在windows、osx和linux上运行相同的exe。他们很高兴
为每个平台配备不同的安装程序,并期望安装程序以不同的方式工作

我就是这样做的:

OSX:将AppBundler与捆绑的jre一起使用,将其与DMGCanvas一起放在Dmg上。用户只需将应用程序拖动到其/application文件夹

Windows:将Izpack与捆绑的jre一起使用,并用launch4j包装,这样安装程序就可以作为exe运行

Linux:使用Izpack而不使用捆绑的jre,因为用户Linux用户希望完全控制他们机器上的内容,但指定允许的Java最低版本。理想情况下,我应该为主要的Linux软件包管理器(如rpm)创建软件包,但我认为目前不值得这么做,因为Linux用户只占我客户群的一小部分


大多数安装都是使用Maven和Ant自动完成的,因此构建这些不同的安装程序并不是一件大事

Oracle提供的一个全新解决方案如下:

内容如下:

自包含的应用程序包提供以下好处: