10

Java 7を必要とする.jarを作成しました。Java7(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 can to load class」によると、Java7がインストールされていないことを意味します。でもやるよ。

したがって、私の仮説は、Java7とJavaApplicationStub互換性がないということです。

同じタスクを実行するためのANTタスクについても聞いたことがありますが、複雑すぎるようで、ANTの使用方法がわかりません。しかし、これが本当に解決策であるなら、私は喜んで学びたいと思います。

編集:私は今、Eclipseのエクスポート>その他>MacOSアプリケーションバンドルも試しました。これも失敗します。

私は10.8MountainLion、64ビットを実行しています。

4

1 に答える 1

17

問題

JavaApplicationStubリンゴがここにあるというあなたの仮定は間違いなく正しいです。

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

Mac OS X 用の Apple 独自の Java パッケージ ビルドとのみ互換性があります。

理由

Apple は独自の Java システム パッケージを廃止し、フェード アウト プロセスで Java 6 のみをサポートしています。Oracle が引き継いで、10.7.3 以降の Mac OS X 用の Java 7 を提供します。Jar Bundler.app次の投稿でわかるように、Apple は予告なしに開発者ツールを廃止しています。

Apples によって読み取られるの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 用の Oracle の Java 7 のみをサポートしており、Apple 独自の Java システム パッケージとの後方互換性はありません。

幸いなことに、Oracle の Java 7 JRE をアプリケーション パッケージにインライン化できます。ディレクトリ内に含まれます

  • Contents/PlugIns

たとえば、アプリケーションパッケージで

  • Contents/PlugIns/jdk1.7.0_17.jdk

これは、アプリケーション パッケージが完全に自己完結型であり、App Store への展開の準備が整っていることを意味します。

しかし、そうする必要はありません。インストールされている Oracle Java 7 パッケージを利用することもできます。

より詳細な回答については、以下もチェックアウトする必要があります。

于 2013-03-13T07:38:44.923 に答える