我必须发布带有嵌入式JRE的swing应用程序。带有application + JRE + .bat / .sh的压缩存档为Windows和Linux提供了技巧。用户下载zip,解压缩并启动应用程序。完美。
但是现在,我必须为Mac OS X提供相同的功能。我已经阅读/被告知有很多不同的事情(禁止在Mac上发布JRE,相反,Mac上总有一个JRE等等...),所以我对我可能做的事情感到困惑。
有没有人做过这样的事情?你是如何解决Mac应用程序部署的?作为奖励,在Mac上分发我的应用程序的最佳格式是什么(zip?)?
答案 0 :(得分:3)
查看java.net上的appbundler项目。它提供了一个Ant任务,可以将您的应用程序打包为普通的Mac .app
包,并且可以选择包含嵌入式JRE。
Mac上的整个Java版本目前有点混乱,因为我们仍然处于过渡时期,Apple 6提供并维护Java 6版本,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上运行。但是,当他们尝试运行你的应用程序时,任何拥有最新Mac但只有Java 7的人都会被提示下载并安装Java 6。
将.app
分发到.zip
存档中是很好的,只要应用程序内的Contents/MacOS
目录中的所有内容(以及嵌入式JRE中的相应文件,如果适用)都是在zip文件中标有执行权限。如果您使用Ant进行构建,则需要使用<zipfileset>
和filemode
。
答案 1 :(得分:2)
最简单的方法使用与通过Java Web Start部署的任何其他平台相同的JAR。我从未尝试过使用它来安装JRE。
提供更多Mac友好体验的最佳方法要求您将JAR包装在应用程序包中,在文章引用的here中进行了讨论。首选投放格式为压缩disk image,.dmg
。
文章Java Deployment Options for Mac OS X比较了两种选择。这个game是一个可以以任何方式启动的示例。
附录:对于好奇,Mac OS X Finder将.jnlp
文件视为文档,默认情况下使用JWS启动程序打开。我在dock文件夹中保留了一些常用.jnlp
文件的文件夹,以便快速访问。 Java Preferences控制面板允许管理缓存的应用程序。选择安装快捷方式会在目标文件夹中创建一个简单的Mac应用程序包,并且可以像编辑其他任何内容一样编辑包含的Info.plist
。自定义.plist
的决定取决于应用程序所需的功能:屏幕菜单栏,底座名称和图标,JNI路径等。
答案 2 :(得分:1)
我认为您可以放心地假设JRE已经存在于Mac上。
最佳格式(我告诉我 - 我自己不是Mac用户)是“App”包的tar.gz
(保留文件属性)。
你可以使用“jarbundler”(http://sourceforge.net/projects/jarbundler/)创建一个适当的Mac“捆绑”,可以毫不费力地提取。确保捆绑包中的Stub在Ant tar
任务中标记为“可执行”。
如果安装了多个JRE,我认为存在一些问题。在这种情况下,必须使用正确的Stub来启动应用程序所需的JRE版本。如果我没记错的话,这个Stub位于/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
有一个页面表明Java7和jarbundler可能存在问题:http://informagen.com/JarBundler/