gpt4 book ai didi

java - 为 Mac bundle 一个 Java 7 .jar

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:34 25 4
gpt4 key购买 nike

我创建了一个需要 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 > Other > Mac OS Application Bundle。这也失败了。

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

最佳答案

问题

您的假设绝对正确,Apple 的 JavaApplicationStub 位于此处:

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

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

原因

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

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

UserNotificationCenter

因此,您可能会发现已退役的 Apple Java 6 世界与 future 的 Oracle Java 7 世界之间存在其他不一致之处。

解决方案

要构建基于 Oracles Java 7 的应用程序包,您需要使用 Oracles AppBundler包含 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 包。

要获得更详细的答案,您还应该查看:

关于java - 为 Mac bundle 一个 Java 7 .jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com