[英]How to set a particular JRE version as default for my Java application running on JBoss
[英]How to deliver my Java application with a particular JRE?
有人知道如何将特定的JRE与已编译的Java应用程序一起打包吗? 我目前有一个可执行jar文件,并希望将JRE 6 Update 31放入其中。 因此,无论客户端安装了哪个JRE版本,应用程序都会使用随附的JRE。 解决方案应该独立于平台。
有任何想法吗? 提前谢谢了!
如果您在目标平台上安装了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
..boom,完成了! 双击批处理文件,它使用本地jre运行您的jar文件。 要自己证明,请卸载系统jre并双击批处理文件。 仍然有效。
您可以在Linux或OS X上以类似的方式执行此操作。
我还想指出,这是一种相当普遍的做法,许多Java发行版都是这样完成的。 所以,不要说你不能或不应该。
但是,有一些警告。 在我的Windows x64示例中,这确实使您的发行版更大并且依赖于平台。 但是,它可行且易于管理。 jre支持有限数量的平台并猜测它们是什么......它们也依赖于平台。
在OSX上,他们正在从提供Java的Apple转向提供Java的Oracle,这也意味着Java不会安装在全新的OSX上。 Oracle提供了一个用于打包Java安装的工具,他们强烈建议在安装过程中提供jre。 这样做的好处是客户不必安装额外的软件包来运行您的应用程序,您可以针对正确的Java运行时测试您的应用程序,并确保在发货之前没有不兼容性。 令人遗憾的是,构建安装程序会稍微复杂一些,而且下载量会更大。
当然,如果你想为Windows,Linux ectera提供你的应用程序,那么构建安装程序会变得更加复杂,只提供一个可执行的jar会更简单,但这不是客户想要的体验。 客户不希望能够下载一个应用程序并在Windows,osx和linux上运行相同的exe。 他们很高兴
为每个平台安装不同的安装程序,并期望安装程序以不同的方式工作。
我是这样做的:
OSX:将AppBundler与捆绑的jre一起使用,放入带有DMGCanvas的Dmg。 用户只需将应用程序拖动到其/ Application文件夹即可。
Windows:使用带有launch4j包装的捆绑jre的Izpack,因此安装程序可以作为exe运行。
Linux:使用没有捆绑jre的Izpack,因为用户linux用户喜欢控制他们机器上的确切内容,但是指定允许的最小Java版本。 理想情况下,我应该为主要的Linux软件包管理器创建软件包,例如rpm,但我认为目前这不值得,因为Linux用户只占我的客户群的一小部分。
大多数安装都是使用Maven和Ant自动完成的,因此构建这些不同的安装程序并不是一件大事。
我们对生产中的商业产品具有相同的情况。 我们已经下载了特定版本的windows和linux JRE,并使用IzPack将其打包到应用程序中。
如果想要安装应用程序,则必须安装“我们的”JRE,并且无论系统安装了JRE还是JDK,该应用程序都由该JRE运行。
缺点是:安装程序适用于Windows或Linux,大小约为50 MB。 解压缩时模块的大小为:
如果我想让它更“独立于平台”,我必须打包两个JRE,安装程序大约为100 MB。 它只对两种类型的平台有效(见Cthulhu的回答)。
请注意,我们通过SSH进行大多数远程安装,并且使用压缩选项至少会将打包时间增加约10倍(从几分钟到几十分钟)。
Oracle提供的一个相当新的解决方案是:
它写道:
独立的应用程序包提供以下好处:
用户使用他们熟悉的安装程序安装应用程序,并以通常的方式启动它。
您可以控制应用程序使用的JRE版本。
应用程序可以部署在新系统上,无需安装JRE。
但这种方法的缺点是:
只能使用JDK 7 Update 6或更高版本构建自包含的应用程序包。
看看您是否计划分发此捆绑包(您的应用程序+ JRE),然后有一个实用程序install4J ,它是一个功能强大的多平台Java安装程序构建器,可为Java应用程序生成本机安装程序和应用程序启动程序。
您可以使用java webstart部署它,这使您可以下载某个版本的jre(如果不存在)。 但是,我不知道是否可以降级。 Java也必须已经安装。
这不是直接可能的。 为了实现这一点,您必须为每个平台下载VM。 对于Windows,将JRE复制到目录和jar,并通过shell脚本调用分布式JVM。 但这很难,而且Cthulhu描述的解决方案是最好的,即检查版本并指向网页。
但是有一些你可能会检查出来。
JSmooth - http://jsmooth.sourceforge.net/
Jar2Exe - http://transfer2pc.weebly.com/1/post/2011/10/jar2exe-converter-11-gui.html
如果它是NetBeans平台应用程序,NetBeans本身可以选择捆绑其他资源和JRE。
资料来源: https : //platform.netbeans.org/tutorials/nbm-nbi.html#bundling-jre
你可以看看oracle提供的jrecreate,它可能只是做你需要/想要的东西。
https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/jrecreate.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.