有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有什么想法吗?非常感谢


共 (6) 个答案

  1. # 1 楼答案

    在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自动完成的,因此构建这些不同的安装程序并不是一件大事

  2. # 2 楼答案

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

    Self contained packaging

    上面写着:

    Self-contained application packages provide the following benefits:

    • Users install the application with an installer that is familiar to them and launch it in the usual way.

    • You control the version of the JRE used by the application.

    • Applications can be deployed on fresh systems with no requirement for the JRE to be installed.

    但这种方法的缺点是:

    Self-contained application packages can only be built using JDK 7 Update 6 or later.

  3. # 3 楼答案

    如果你计划发布这个捆绑包(你的应用程序+JRE),那么有一个实用工具install4J,它是一个强大的多平台Java安装程序生成器,为Java应用程序生成本机安装程序和应用程序启动器

  4. # 4 楼答案

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

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

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

    • 应用程序本身~5MB
    • libs~10MB
    • JRE~90MB

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

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

  5. # 5 楼答案

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

  6. # 6 楼答案

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

    以下是我的工作:

    • 我的jar文件位于dist文件夹中
    • 将系统jre文件夹复制到dist\jre-win-1.7.0_04
    • 创建一个。包含以下行的bat文件 jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar

    。。轰,完成!双击批处理文件,它会用本地jre运行jar文件。为了向自己证明这一点,请卸载系统jre并双击批处理文件。仍然有效

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

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

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