捆绑Java 7 .jar for Mac

时间:2012-08-24 03:14:57

标签: java macos package bundle

我创建了一个需要Java 7的.jar。我有Java 7(JDK和JRE),我可以双击运行.jar。但是,我想将其打包成一个应用程序。

我尝试过:使用Apple的Jar Bundler工具,我成功创建了一个应用程序;然而,当我运行它时,它会很快出现并在码头中消失。当我从终端运行内部文件JavaApplicationStub时,我得到:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/lcmmun/kiosk/gui/Kiosk : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at apple.launcher.LaunchRunner.loadMainMethod(LaunchRunner.java:56)
    at apple.launcher.LaunchRunner.run(LaunchRunner.java:112)
    at apple.launcher.LaunchRunner.callMain(LaunchRunner.java:51)
    at apple.launcher.JavaApplicationLauncher.launch(JavaApplicationLauncher.java:52)

,根据“unsupportedclassversionerror unsupported major.minor version 51.0 unable to load class”表示我没有安装Java 7。但我知道。

所以我的假设是JavaApplicationStub与Java 7不兼容。

我也听说an ANT task完成了同样的任务,但它似乎太复杂了,我不知道如何使用ANT。如果这确实是解决方案,我会很乐意学习。

编辑:我现在也尝试过Eclipse的 Export>其他> Mac OS应用程序包。这也失败了。

我正在运行10.8 Mountain Mountain,64位。

1 个答案:

答案 0 :(得分:17)

问题

你绝对认为Apples JavaApplicationStub位于此处

  • System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub

仅与Apples自己为Mac OS X构建的Java包兼容。

原因

Apple正在停止使用自己的Java系统软件包,并且只在淡出过程中支持Java 6。 Oracle现在已经完成了从10.7.3开始为Mac OS X提供Java 7。 Apple甚至在没有任何通知的情况下停止使用Jar Bundler.app等开发人员工具,正如您在本文中所看到的那样:

有些人甚至拼命想要手动增加JVMVersion中的Info.plist属性值,由Apples JavaApplicationStub读取,来自文档1.61.6+对于像1.7这样的无证文字。这也不起作用,即使你已经安装了Oracles Java 7 Package,你也会得到这样的对话框。

UserNotificationCenter

因此,您可能会在退役的Apple Java 6世界与未来的Oracle Java 7世界之间找到其他不一致的地方。

解决方案

要构建基于Oracles Java 7的应用程序包,您需要使用包含Oracles AppBundler的Oracles JavaAppLauncher Ant任务。这个现在只支持用于Mac OS X的Oracles Java 7,并且不向后兼容Apples自己的Java系统包。

现在好消息是,您可以将Oracles Java 7 JRE内联到您的应用程序包中。它将包含在目录

  • Contents/PlugIns
应用程序包中的

,例如

  • Contents/PlugIns/jdk1.7.0_17.jdk

这意味着您的应用程序包完全自包含,可以进行App Store部署。

但你不必这样做。您还可以依赖已安装的Oracle Java 7软件包。

如需更详细的解答,您还应该结帐: