16

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

4

5 回答 5

16

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

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

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

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

从 10.7.5 及更高版本开始,如果您不希望在用户首次出现时显示您的应用来自身份不明的开发者的对话框,则您的应用必须与 Gatekeeper 兼容并签名(因此您必须注册付费的 Mac 开发者计划)打开它。

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

注意 AppBundler 缺少一些有用的功能,你可能对这个 fork感兴趣。

于 2012-10-02T08:36:37.723 回答
6

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

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

  • 您将遇到的第一个问题是,目前只有 Apple 版本或Oracle Java 7u6 Mac OS X Port Developer Preview Release(这只是一个预览版)。(例如, 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)
    

    然后我会重命名Homejre

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

    #!/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

于 2012-07-10T19:31:44.080 回答
2

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

于 2012-07-26T10:09:23.087 回答
2

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

于 2014-02-22T19:55:50.983 回答
0

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

于 2018-05-23T11:08:37.563 回答