在OSX上使用捆绑的JRE

一段时间以来,我们的Java应用程序预先捆绑了Windows上的JRE。 我们有一个用C编写的小型启动器应用程序,使应用程序使用我们的预捆绑JRE。 现在,随着Apple的讨伐慢慢杀死Java,我们已经决定在OSX上做类似的事情是谨慎的。 在OSX上使用预捆绑JRE的最佳方法是什么?

即使我发现它是个坏主意(见下文),你也可以捆绑一个像OpenJDK这样的JVM,然后用一个调用java可执行文件的小脚本启动你的应用程序。

注意:我不知道是否允许重新分发JVM(合法),您应该在下载之前检查协议

  • 您将遇到的第一个问题是,目前只有Apple版本或Oracle Java 7u6 Mac OS X端口开发人员预览版本 (这只是一个预览版)。 (例如, http : //jdk7.java.net/macportpreview/ )。 苹果将​​停止提供自己的版本,这将在未来发生变化。 所以目前你只能在Lion上运行预览。 但我会告诉你一个例子。

  • 下载安装程序,挂载磁盘映像,右键单击插件,选择“显示包内容”解压缩Home文件夹,它包含JRE

  • 然后你可以查看

     $ ./Home/bin/java java version "1.7.0_06-ea" Java(TM) SE Runtime Environment (build 1.7.0_06-ea-b18) Java HotSpot(TM) 64-Bit Server VM (build 23.2-b08, mixed mode) 

    然后我会像jre一样重命名Home

  • 如果您将此文件夹与应用程序打包在一起,则只需要包含一个小脚本

     #!/bin/sh ./jre/bin/java -classpath myniceapplication.jar 
  • 为了能够构建一个应用程序,您需要一个包含脚本的applicationname.app/Contents/MacOS文件夹(应该命名为applicationname )。

  • 现在看来你需要在这些脚本中使用绝对路径

     /Path/applicationname.app/Contents/MacOS/jre/bin/java -classpath myniceapplication.jar 

    我想有一个更好的解决方案来构建Mac OS X应用程序包但我不是专家。 这个例子只是为了表明它可以工作。

总结:

  • 检查是否允许重新分发JRE(并检查哪些条件)

  • 我不会这样做,因为每次有JRE安全更新时你都必须保持更新并更新你的应用程序

  • 作为一个用户,我会比一个随机的开发人员(没有个人的:-)更信任Oracle以获得JRE

我是@Daniel在他的回答中链接的博客文章的作者。 我成功捆绑了OpenJDK并在Mac App Store上发布了一个Java应用程序。

首先,让我纠正接受的答案中的一些问题。

  • 捆绑OpenJDK并重新分发它是完全合法的。
  • OpenJDK不仅仅在Lion上运行,我在Lion-Lion之前使用它。 它需要修补才能在32位操作系统上运行。
  • OpenJDK处于测试质量状态,但运行复杂的Swing应用程序仍然可以接受。 OSX上有一些问题,但我在这篇文章中描述了如何修复它们。

没有必要像@Matteo的回答中所描述的那样创建任何脚本,您可以使用Oracle发布的名为AppBundler的应用程序来创建将启动应用程序并创建本机包的本机可执行文件。 AppBundler还将生成一个Info.plist文件,其中包含有关如何启动应用程序的信息,例如要启动的可执行文件的名称,Java参数等…

从10.7.5及更高版本开始,您的应用必须与Gatekeeper兼容并签名(因此您必须注册付费的Mac开发人员计划),如果您不想要一个对话框,说明您的应用是来自身份不明的开发人员,那么当用户首次出现时打开它。

要部署在App Store上,您的应用程序还必须能够在沙盒环境中工作,但如果您将其分发到App Store之外,则不是严格的要求。

请注意,AppBundler缺少一些有用的function,您可能对此fork感兴趣。

此博客文章中有一些关于在您的应用中捆绑JRE并将其提交到App Store的详细说明。

以下是Oracle自己关于如何捆绑JRE以在Apple上发布的分步指南: http : //docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html

虽然这个答复在最初的问题之后很久,但是仍然可能对仍在寻找答案的其他人感兴趣。
我是一个名为Pyxis Bundler的小应用程序的开发团队,它可以捆绑OSX的应用程序,用户可以选择在其CLASSPATH中包含JRE,可以选择特定的JRE或不选择。
此应用程序将生成一个结构合理的Mac应用程序包,包括图标和启动,用户甚至可以将版本号写入启动画面。 此外,它还可以从PNG文件创建多分辨率Apple图标图像(用作现代ICNS文件)。 这是一个易于使用的GUI应用程序,可以自动保存设置,从而轻松更新应用程序。 唯一的先决条件是开发人员使用正确的包名称。 不允许使用单字包名称。 有关更多信息,请访问https://explorepyxis.com免费试用版。 请发送电子邮件给公司以请求相同的电子邮件。