在Mac OS X上打包私有JRE

24

从下一个版本的Mac OS X开始,系统将不再包含Java,而我不想强迫我的客户自行安装它。因此,我想像在Windows上一样,将其与我的应用捆绑在一起。这也让我有些希望它能够被包含在Mac App Store中。

我可以从哪里下载可与我的应用程序一起使用的Mac OS X JRE?还是我可以直接复制已安装在我的Mac上的JRE?


只是好奇,你从哪里得知Mac OS X将不包含任何JRE? - david van brink
Java 6 SE 将可在 OS X 10.7 上使用:http://www.apple.com/pr/library/2010/11/12openjdk.html - mipadi
@mipadi: 我认为关键词是“可用”,而不是“包含在默认安装中”。甚至可能连Apple也正在为10.7保留选择权。但事实是,需要Java的程序不符合Mac App Store的条件。 Java 迟早会成为可选下载,首先是由 Apple 提供,然后是 Oracle。 - Tomas Andrle
3个回答

12

更新(2013年4月15日):

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

以前的版本(带编辑):

这是个好问题。我本来想回答你,Java不会被删除,直到Lion发布。然而,这篇文章明确表示,今天不允许使用Java:

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

与此同时,还没有人宣布适用于Mac OS X的可再分发JRE。考虑到你正在开辟新的道路,我认为你们最好的选择是查看OpenJDK项目的Mac OS X Port维基页面。它明确描述了如何编译自己的JDK,但并没有清楚地说明所得到的JDK是否可以“干净地”“捆绑”。我想你只能尝试一下:(。

此外,不清楚OpenJDK许可证是否允许这样做(IANAL)。希望其他人已经针对Linux/Windows弄清楚了这个问题,尽管对于苹果贡献来说规则可能会有所不同。

希望这可以帮助你。如果没有其他帮助,至少也是一个起点。

编辑: 我要提出一些建议。现在我们知道Mono应用程序可以打包到App Store中。此外,IKVM.NET是一个在Mono之上运行的完整的Java实现。理论上,你可以尝试将这两个部分组合起来,得到一个打包为App Store的Java应用程序,而不需要JRE!

如果你尝试这样做,我很想听听它的效果 :-).

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


3
您不必通过应用商店分发您的应用程序。如果这样做,您可以将JRE与其捆绑,并以GPL许可发布。(这个建议更针对OP,而非Matt Solnit,但我认为在此评论相关。) - mipadi
@unhillbilly 你说得对,这是我的错误。Lion将包含Java 6,但Java 7将作为Oracle的单独下载。然而,这并不改变App Store的情况。 - Matt Solnit
@Matt,看起来App Store的前景不太好。感谢提供IKVM信息--非常有趣。我想知道它是否会像Dalvik/Android一样违反Oracle的规定? - David J. Liszewski
@unhillbilly:如果你只是表面上看,那个链接并没有说Java将成为Lion的一部分——只是说即使在Lion发布后,Java 6仍然“可从Apple获得”。Final Cut Pro也将可从Apple获得,但它也不是Lion的一部分。 - Chuck
哇,我刚在我的应用程序上尝试了一下。仅仅几分钟,我就成功地获得了一些初始化日志输出(通过log4j)。然后它因为一些JNI问题无法加载ikvm-native。等我睡醒后,我会进一步调查。这绝对看起来很有前途。 - Tomas Andrle
Oracle现在已经公布了如何将包含JRE的Java应用程序发布到Apple App Store的说明。 - Thorbjørn Ravn Andersen

4
在我找到这个问题的同时,我还找到了来自OpenJDK项目的这些说明。但由于我自己没有尝试过,无法评论它们的有效性。
与此同时,Marco Dinacci也发表了一篇非常详细的文章,其中也涉及签名和沙盒技术。

-2

上个月,苹果加入了Sun/Oracle OpenJDK开源项目,因此苹果上的Java仍然活跃。

只需告诉用户下载并安装Mac OSX的OpenJDK JRE(目前只有源代码可用)。

不可以未经许可包含“你的Mac中的文件夹”,因为这是苹果的版权代码。

最后,打包“私有JRE”是一个非常糟糕的做法,它会使您的应用程序变得臃肿,并且如果用户最终运行多个Java应用程序,则最终同时运行多个Java VM,这是对系统资源的可怕浪费。


1
我非常了解苹果/甲骨文的情况。但这并不能解决我的问题。除了以某种方式编译成本地代码,打包私有JRE是将Java应用程序放入Mac App Store的唯一方法。规则规定应用程序不得依赖于可选的第三方组件。所以很遗憾,我不能“只是告诉用户”。 - Tomas Andrle
1
目前您无法告诉任何人 - 也永远无法告诉App Store用户 - “下载并安装Mac OS X的OpenJDK JRE”,因此这根本没有回答问题。 - Chuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接