如何使用特定的JRE交付Java应用程序?
有人知道如何将特定的JRE与已编译的Java应用程序打包在一起吗?我目前有一个可执行的jar文件,希望将JRE 6 Update 31放入其中。因此,无论客户端安装了哪个JRE版本,应用程序都会使用附带的JRE。解决方案应该独立于平台工作
有什么想法吗?非常感谢
你可以在下面搜索框中键入要查询的问题!
有人知道如何将特定的JRE与已编译的Java应用程序打包在一起吗?我目前有一个可执行的jar文件,希望将JRE 6 Update 31放入其中。因此,无论客户端安装了哪个JRE版本,应用程序都会使用附带的JRE。解决方案应该独立于平台工作
有什么想法吗?非常感谢
# 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 楼答案
Oracle提供的一个全新解决方案如下:
Self contained packaging
上面写着:
但这种方法的缺点是:
# 3 楼答案
如果你计划发布这个捆绑包(你的应用程序+JRE),那么有一个实用工具install4J,它是一个强大的多平台Java安装程序生成器,为Java应用程序生成本机安装程序和应用程序启动器
# 4 楼答案
我们在生产商业产品时也有同样的情况。我们下载了特定版本的windows和linux JRE,并使用IzPack将其与应用程序打包
如果要安装应用程序,必须安装“我们的”JRE,并且无论系统安装了JRE或JDK,该应用程序都由该JRE运行
缺点是:安装程序是为Windows或Linux制作的,大小约为50 MB。打开包装时,模块的尺寸为:
如果我想让它更“独立于平台”,我必须打包两个JRE,安装程序的容量大约为100 MB。它仍然只适用于两种类型的平台(见Cthulhu的答案)
请注意,我们主要通过SSH进行远程安装,使用压缩选项至少会将打包时间增加10倍(从几分钟增加到几十分钟)
# 5 楼答案
您可以使用java webstart部署它,它允许您下载jre的特定版本(如果没有)。然而,我不知道降级是否可能。Java也必须已经安装
# 6 楼答案
如果你在目标平台上安装了jre,比如Windows 64位,只需复制Java安装中
jre
文件夹下的所有内容,并将其放在发行版中即可。然后创建一个批处理文件,指向本地jre,而不是系统jre以下是我的工作:
dist
文件夹中jre
文件夹复制到dist\jre-win-1.7.0_04
jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar
。。轰,完成!双击批处理文件,它会用本地jre运行jar文件。为了向自己证明这一点,请卸载系统jre并双击批处理文件。仍然有效
您可以在Linux或OS X上以类似的方式执行此操作
我还想指出,这是一种相当常见的做法,许多Java发行版都是这样做的。所以,不要说你不能或不应该
然而,也有一些警告。在我的示例Windows x64中,这确实使您的发行版更大,并且依赖于平台。然而,这是可行和可控的。jre支持的平台数量有限,猜猜看。。。它们也依赖于平台