Пакет Java 7 .jar для Mac
Я создал.jar, который требует Java 7. У меня есть 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. Если бы это действительно было решением, я был бы счастлив узнать.
РЕДАКТИРОВАТЬ: я также попробовал Eclipse Экспорт> Другое> Mac OS Application Bundle. Это также не удается.
Я бегу 10,8 Mountain Lion, 64-битный.
1 ответ
вопрос
Вы определенно правы с вашим предположением, что яблоки JavaApplicationStub
находится здесь:
System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
совместим только с собственной сборкой Java Packages для Mac OS X.
причина
Apple прекращает выпуск своих собственных системных пакетов Java и поддерживает только Java 6 в процессе их исчезновения. Oracle вступил во владение и предоставляет Java 7 для Mac OS X начиная с 10.7.3. Apple даже прекращает разработку таких инструментов, как Jar Bundler.app
без какого-либо уведомления, как вы можете видеть в этом посте:
Некоторые люди даже отчаянно пытались вручную увеличить JVMVersion
стоимость имущества в Info.plist
прочитанный яблоками JavaApplicationStub
из документального литерала 1.6
или же 1.6+
недокументированному буквальному как 1.7
, Это тоже не сработает, и вы получите диалоговое окно, подобное этому, даже если вы установили пакет Oracle 7 Java.
Так что, скорее всего, вы найдете другие несоответствия между устаревшим миром Apple Java 6 и будущим миром Oracle Java 7.
Решение
Для создания пакетов приложений на основе Oracle 7 для Oracle необходимо использовать Ant-задачу Oracles, содержащую Oracle. JavaAppLauncher
, Теперь он поддерживает только Oracles Java 7 для Mac OS X и не имеет обратной совместимости с собственными системными пакетами Java от Apple.
Хорошая новость заключается в том, что вы можете встроить Oracle 7 JRE в свой пакет приложений. Он будет содержаться в каталоге
Contents/PlugIns
в пакете приложения, например
Contents/PlugIns/jdk1.7.0_17.jdk
Это означает, что ваш пакет приложений полностью автономен и готов к развертыванию в App Store.
Но ты не обязан это делать. Вы также можете положиться на установленный пакет Oracle Java 7.
Для более подробного ответа вы также должны оформить заказ: