繁体   English   中英

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

[英]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。

这是我做的:

  • 我的jar文件在dist文件夹中
  • 将系统jre文件夹复制到dist\\jre-win-1.7.0_04
  • 创建一个.bat文件,其中包含以下行: 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。 解压缩时模块的大小为:

  • app本身~5MB
  • libs~10 MB
  • JRE~90 MB

如果我想让它更“独立于平台”,我必须打包两个JRE,安装程序大约为100 MB。 它只对两种类型的平台有效(见Cthulhu的回答)。

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

Oracle提供的一个相当新的解决方案是:

独立包装

它写道:

独立的应用程序包提供以下好处:

  • 用户使用他们熟悉的安装程序安装应用程序,并以通常的方式启动它。

  • 您可以控制应用程序使用的JRE版本。

  • 应用程序可以部署在新系统上,无需安装JRE。

但这种方法的缺点是:

只能使用JDK 7 Update 6或更高版本构建自包含的应用程序包。

看看您是否计划分发此捆绑包(您的应用程序+ JRE),然后有一个实用程序install4J ,它是一个功能强大的多平台Java安装程序构建器,可为Java应用程序生成本机安装程序和应用程序启动程序。

您可以使用java webstart部署它,这使您可以下载某个版本的jre(如果不存在)。 但是,我不知道是否可以降级。 Java也必须已经安装。

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

这不是直接可能的。 为了实现这一点,您必须为每个平台下载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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM