捆绑Java 7 .jar for Mac [英] Bundle a Java 7 .jar for Mac

查看:100
本文介绍了捆绑Java 7 .jar for Mac的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

 线程main中的异常java.lang.UnsupportedClassVersionError:org / lcmmun / kiosk / gui / Kiosk:不支持的major.minor版本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 )$ java $ b 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.loadCl ass(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)

根据包含Oracles的Ant任务 JavaAppLauncher 。这个现在只支持Oracles Java 7 for Mac OS X,并且不向后兼容Apples自己的Java系统包。



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




  • 目录/插件
  • $应用程序包中的b $ b


,例如




  • 目录/ PlugIns / jdk1.7.0_17.jdk



这意味着您的应用程序包完全是自包含并为App Store部署做好准备。



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



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




I created a .jar that requires Java 7. I have Java 7 (JDK and JRE) and I can double-click to run the .jar. However, I want to package this into an application.

What I tried: Using Apple's Jar Bundler tool, I successfully created an application; however, when I run it, it quickly appears and disappears in the dock. When I run the internal file JavaApplicationStub from Terminal, I get:

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)

which, according to "unsupportedclassversionerror unsupported major.minor version 51.0 unable to load class" means that I don't have Java 7 installed. But I do.

So my hypothesis is that JavaApplicationStub is Java 7-incompatible.

I've also heard of an ANT task to accomplish the same task, but it seemed too complicated, and I don't know how to use ANT. If this really is the solution, though, I'd be happy to learn.

EDIT: I have now also tried Eclipse's Export > Other > Mac OS Application Bundle. This fails as well.

I'm running 10.8 Mountain Lion, 64-bit.

解决方案

Issue

You are definitely right with your assumption that Apples JavaApplicationStub located here:

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

is only compatible with Apples own Java Packages build for Mac OS X.

Reason

Apple is discontinuing their own Java System Packages and only supports Java 6 in their fade out process. Oracle took now over and provides Java 7 for Mac OS X from 10.7.3 on. Apple is even discontinuing developer tools like Jar Bundler.app without any notice, as you can see in this post:

Some people even tried desperately to manually increase the JVMVersion property value in Info.plist, read by Apples JavaApplicationStub, from a documented literal 1.6 or 1.6+ to an undocumented literal like 1.7. This won't work either and you will end up with a dialog like this, even if you have installed Oracles Java 7 Package.

So it is likely you will find other inconstancies between the retired Apple Java 6 world and the future Oracle Java 7 world.

Solution

To build an application packages based on Oracles Java 7 you need to use Oracles AppBundler Ant Task containing Oracles JavaAppLauncher. This one now only supports Oracles Java 7 for Mac OS X and isn't backwards compatible with Apples own Java System Packages.

The good news now is, you can inline Oracles Java 7 JRE into your application package. It will be contained within the directory

  • Contents/PlugIns

in the application package, for example

  • Contents/PlugIns/jdk1.7.0_17.jdk

This means your application package is totally self contained and ready for App Store deployment.

But you don't have to do that. You could also rely on the installed Oracle Java 7 Package.

For a more detailed answer you should also checkout:

这篇关于捆绑Java 7 .jar for Mac的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆