6

我必须发布一个带有嵌入式 JRE 的 Swing 应用程序。一个带有应用程序 + JRE + .bat/.sh 的压缩归档文件在 Windows 和 Linux 上起到了作用。用户下载 zip,解压缩,然后启动应用程序。完美的。

但是现在,我必须为 Mac OS X 提供同样的东西。我已经阅读/被告知了很多不同的事情(禁止在 Mac 上分发 JRE,相反,Mac 上总是有 JRE,等等。 ..),所以我真的很困惑我能做什么。

有人已经做过这样的事情了吗?您是如何解决 Mac 应用程序部署的?作为奖励,在 Mac 中分发我的应用程序的最佳格式是什么(zip?)?

4

3 回答 3

3

看看 java.net 上的appbundle项目。它提供了一个 Ant 任务,它将您的应用程序打包为一个普通的 Mac.app包,并且可以选择包含一个嵌入式 JRE。

目前,Mac 上的整个 Java 环境有点混乱,因为我们仍处于过渡时期,Java 6 版本由 Apple 提供和维护,Java 7 版本直接来自 Oracle。a_horse_with_no_name 引用的 jarbundler 项目用于将 JAR 打包为一个.app包,该包将在 Mac OS X 10.5/6/7 随附的 Apple 提供的 Java 6 上运行,但在 Oracle Java 7 上不运行,相反,appbundler 以 Oracle 为目标Java 7 及其.app捆绑软件不能在 Java 6 上运行。

如果您想针对最近运行 10.7 或 10.8 的 Mac,特别是如果您想通过 Mac App Store 分发您的应用程序,那么您应该使用 appbundler 并捆绑 JRE 的副本。如果您不想通过商店分发,则嵌入式 JRE 是可选的。如果您的应用程序可以在 Java 6 上运行,那么使用 jarbundler 以 Apple Java 6 为目标将意味着您的应用程序可以在较旧的 (<= 10.6) Mac 上运行。但是,当他们尝试运行您的应用程序时,系统会提示任何拥有仅 Java 7 的较新 Mac 的人下载并安装 Java 6。

只要应用程序内的目录中的所有内容(以及嵌入式 JRE 中的相应文件,如果适用)在 zip 文件中标记为执行权限,就可以将其分发到.app存档中。如果您使用 Ant 构建,则需要将s 与 right一起使用。.zipContents/MacOS<zipfileset>filemode

于 2013-01-23T16:41:35.733 回答
2

简单的方法使用与任何其他平台相同的 JAR,通过Java Web Start部署。我从未尝试使用它来安装 JRE。

提供对 Mac 更友好的体验的最佳方法要求您将 JAR 包装在一个应用程序包中,在此处引用的文章中进行了讨论。首选的交付格式是压缩磁盘映像.dmg.

Mac OS X 的 Java 部署选项一文对这两个选项进行了比较。该游戏是可以以任一方式启动的示例。

附录:出于好奇,Mac OS X Finder 将.jnlp文件视为文档,默认情况下使用 JWS 启动器打开。.jnlp我在停靠文件夹中保留了一些常用文件的文件夹,以便快速访问。Java Preferences 控制面板允许管理缓存的应用程序。选择安装快捷方式会在目标文件夹中创建一个简单的 Mac 应用程序包,并且Info.plist可以像其他任何内容一样编辑包含的内容。自定义的决定.plist取决于应用程序需要哪些功能:屏幕菜单栏、停靠名称和图标、JNI 路径等。

于 2013-01-23T17:42:07.537 回答
1

我认为您可以放心地假设 JRE 已经存在于 Mac 上。

最好的格式(所以我被告知 - 我自己不是 Mac 用户)是tar.gz“应用程序”包的(保留文件属性)。

您可以使用“jarbundler”(http://sourceforge.net/projects/jarbundler/)来创建一个合适的 Mac“bundle”,可以毫不费力地提取它。确保捆绑包中包含的存根在 Anttar任务中被标记为“可执行”。

如果安装了多个 JRE,我认为会有一些问题。在这种情况下,必须使用正确的 Stub 来启动应用程序所需的 JRE 版本。如果我没记错的话,这个存根位于/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub

有一个页面表明 Java7 和 jarbundler 可能存在问题:http: //informagen.com/JarBundler/

于 2013-01-23T16:29:10.543 回答