【问题标题】:Bundling a private JRE on Mac OS X在 Mac OS X 上捆绑私有 JRE
【发布时间】:2013-04-16 12:26:14
【问题描述】:

从 Mac OS X 的下一个版本开始,Java 将不再包含在系统中,我不想强​​迫我的客户自己安装它。所以我想做我在 Windows 上所做的事情 - 将它与我的应用程序捆绑在一起。它也给了我一些希望,它可以被包含在 Mac App Store 中。

我可以在哪里下载可以包含在我的应用程序中的 Mac OS X JRE?或者我可以只复制安装在我的 Mac 上的那个吗?

【问题讨论】:

  • 只是好奇,您从哪里得知 Mac OS X 不会包含任何 JRE?
  • Java 6 SE 将在 OS X 10.7 上可用:apple.com/pr/library/2010/11/12openjdk.html
  • @mipadi:我认为关键词是“可用”,而不是“包含在默认安装中”。甚至 Apple 也可能会为 10.7 留出选择余地。但事实是,需要 Java 的程序不符合 Mac App Store 的条件。 Java 迟早会成为可选下载,首先从 Apple 下载,然后从 Oracle 下载。

标签: macos java


【解决方案1】:

更新(2013 年 4 月 15 日):

正如 Thorbjørn 有用地指出的那样,Oracle 现在有一个解决方案。见http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html。但是,出于“历史目的”,我保留了原始内容,因为这是一个有趣的研究项目。

以前的版本(有修改):

这是一个很好的问题。我要回应说你只是领先于你的时代——正如你所指出的,Java 在 Lion 发布之前不会被删除。但是,this article 明确表示现在不允许使用 Java:

使用已弃用或可选安装的技术(例如 Java、[需要 PowerPC 代码] Rosetta)的应用将被拒绝。

与此同时,还没有人宣布针对 Mac OS X 的可再分发 JRE。我认为你最好的选择是查看 OpenJDK 项目的Mac OS X Port wiki page,记住你正在开辟新天地。它确实描述了如何编译您自己的 JDK,但它没有明确说明生成的 JDK 是否可以干净地“捆绑”。我认为您将不得不尝试一下,看看:-(。

此外,尚不清楚 OpenJDK 许可是否允许这样做 (IANAL)。希望其他人已经在 Linux/Windows 方面弄清楚了这一点,当然,Apple 贡献的规则可能会有所不同。

希望这会有所帮助。如果不出意外,这是一个起点。

编辑:我将提出一个额外的建议。我们现在知道Mono apps can be packaged for the App Store。此外,IKVM.NET 是在 Mono 之上运行的 Java 的完整实现。理论上,您可以尝试将这两个部分组合在一起,并获得一个 Java 应用程序,该应用程序捆绑在 App Store 中,实际上不需要需要 JRE!

如果你试试这个,我很想听听效果如何:-)。

编辑 2: 不幸的是,App Store 和 GPL 似乎不兼容(请参阅 http://www.zdnet.com/blog/open-source/no-gpl-apps-for-apples-app-store/8046)。 OpenJDK 许可证与 GPL 并不完全相同,但它非常接近(再次,IANAL)。因此,Mono 和 IKVM.NET 可能是您最好的选择。祝你好运!

【讨论】:

  • 您不必通过应用商店分发您的应用。如果这样做,您可以将 JRE 与它捆绑在一起,并在 GPL 下发布它。 (这比 Matt Solnit 更针对 OP,但我认为在这里发表评论是相关的。)
  • @unhillbilly 你是对的,这是我的错误。 Lion 将包含 Java 6,但 Java 7 将由 Oracle 单独下载。但是,这不会改变 App Store 的情况。
  • @Matt 是的,它对 App Store 看起来不太好。感谢您提供 IKVM 信息——非常有趣。我想知道它是否会像 Dalvik/Android 那样与 Oracle 发生冲突?
  • @unhillbilly:如果您从表面上看,该链接并没有说 Java 将成为 Lion 的一部分——只是 Java 6 将“从 Apple 提供”,即使在 Lion 发布之后。 Apple 也可以为 Lion 提供 Final Cut Pro,但它也不是 Lion 的一部分。
  • 哇。刚刚在我的应用程序上尝试过。几分钟后,我实际上得到了一些初始化日志输出(通过 log4j)。然后它无法为某些 JNI 内容加载 ikvm-native。睡一觉之后,我再调查一下。它看起来很有希望。
【解决方案2】:

在我发现这个问题的同一个网络搜索中,我从 OpenJDK 项目中找到了 these instructions。我自己没有尝试过,因此无法评论它们的效果。

同时,另一个 very detailled article 由 Marco Dinacci 发布,它也涉及签名和沙盒。

【讨论】:

    【解决方案3】:

    Apple 上个月加入了 Sun/Oracle OpenJDK 开源项目,因此 Apple 上的 Java 生机勃勃。

    只需告诉用户下载并安装适用于 Mac OSX 的 OpenJDK JRE(当它可用时,现在它只是源代码)。

    没有。未经许可,您不能包含“Mac 中的文件夹”,因为它是 Apple 的受版权保护的代码。

    最后,打包一个“私有JRE”是一种非常糟糕的做法,它会让你的应用变得臃肿,而且如果用户最终运行了多个Java应用,他最终会同时运行多个Java VM,这是对系统的严重浪费资源。

    【讨论】:

    • 我非常了解 Apple/Oracle 的情况。那不能解决我的问题。除了以某种方式编译为本机代码之外,打包私有 JRE 是让 Java 应用程序进入 Mac App Store 的唯一方法。规则规定应用程序必须不依赖于可选的 3rd 方组件。所以不幸的是,我不能“只告诉用户”。
    • 您目前无法告诉任何人——也永远能够告诉 App Store 用户——“下载并安装适用于 Mac OS X 的 OpenJDK JRE”,所以这不会根本没有真正回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2014-10-08
    • 2013-02-06
    • 2014-02-09
    • 2011-08-14
    相关资源
    最近更新 更多