我创建了一个需要 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 不支持的major.minor版本51.0无法加载类“ 表示我没有安装 Java 7。但我安装了。
所以我的假设是JavaApplicationStub
与 Java 7 不兼容。
我也听说过ANT 任务完成同样的任务,但似乎太复杂了,而且我不知道如何使用ANT。不过,如果这确实是解决方案,我很乐意学习。
EDIT: 我现在也尝试过 Eclipse 的导出 > 其他 > Mac OS 应用程序包。这也失败了。
我正在运行 10.8 Mountain Lion,64 位。
Issue
你的假设绝对正确,苹果JavaApplicationStub
位于这里:
System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
仅与 Apple 自己为 Mac OS X 构建的 Java 包兼容。
Reason
Apple 正在停止使用自己的 Java 系统包,并在淡出过程中仅支持 Java 6。 Oracle 现在接管并从 10.7.3 开始为 Mac OS X 提供 Java 7。苹果甚至停止了开发者工具,例如Jar Bundler.app
没有任何通知,正如您在这篇文章中看到的:
- 为什么 Jar Bundler 在 Mac OS X Mountain Lion 10.8.2 中消失了
有些人甚至拼命尝试手动增加JVMVersion
财产价值在Info.plist
,由苹果阅读JavaApplicationStub
,来自记录的文字1.6
or 1.6+
未记录的文字,例如1.7
。这也不起作用,即使您已经安装了 Oracles Java 7 Package,您最终也会看到这样的对话框。
因此,您可能会发现已退役的 Apple Java 6 世界和未来的 Oracle Java 7 世界之间存在其他不一致之处。
Solution
要构建基于 Oracles Java 7 的应用程序包,您需要使用 Oracles应用程序捆绑器包含 Oracle 的 Ant 任务JavaAppLauncher。该版本现在仅支持适用于 Mac OS X 的 Oracle Java 7,并且不向后兼容 Apple 自己的 Java 系统包。
现在的好消息是,您可以将 Oracles Java 7 JRE 内联到您的应用程序包中。它将包含在目录中
例如在应用程序包中
Contents/PlugIns/jdk1.7.0_17.jdk
这意味着您的应用程序包是完全独立的,可供 App Store 部署。
但你不必这样做。您还可以依赖已安装的 Oracle Java 7 包。
要获得更详细的答案,您还应该查看:
- 应用程序在 Mac OS X 上使用 Apple 的 Java 6 而不是 Oracle 的 Java 7?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)