10

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

我尝试了什么:使用 Apple 的 Jar Bundler 工具,我成功创建了一个应用程序;但是,当我运行它时,它会迅速出现并消失在 Dock 中。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。但是我愿意。

所以我的假设是JavaApplicationStubJava 7 不兼容。

我也听说过一个ANT任务来完成同样的任务,但是看起来太复杂了,我不知道如何使用ANT。不过,如果这真的是解决方案,我很乐意学习。

编辑:我现在也尝试了 Eclipse 的Export > Other > Mac OS Application Bundle。这也失败了。

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

4

1 回答 1

17

问题

您假设 AppleJavaApplicationStub位于此处,这绝对是正确的:

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

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

原因

Apple 将停止使用自己的 Java System Packages,并且在淡出过程中仅支持 Java 6。Oracle 现在接管并从 10.7.3 开始为 Mac OS X 提供 Java 7。Jar Bundler.app正如您在这篇文章中看到的那样,Apple 甚至在没有任何通知的情况下停止了开发人员工具:

有些人甚至拼命地尝试手动增加Apple 读取的JVMVersion属性值,从记录的文字或未记录的文字(如. 这也不起作用,即使您已经安装了 Oracles Java 7 包,您最终也会看到这样的对话框。Info.plistJavaApplicationStub1.61.6+1.7

用户通知中心

因此,您很可能会在已退役的 Apple Java 6 世界和未来的 Oracle Java 7 世界之间发现其他不一致的地方。

解决方案

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

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

  • Contents/PlugIns

在应用程序包中,例如

  • Contents/PlugIns/jdk1.7.0_17.jdk

这意味着您的应用程序包是完全独立的,可以用于 App Store 部署。

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

有关更详细的答案,您还应该查看:

于 2013-03-13T07:38:44.923 回答