2013-01-23 13 views
6

埋め込みJREを使用してスイングアプリケーションを出荷する必要があります。アプリケーション+ JRE + .bat/.shのzip形式のアーカイブは、WindowsとLinuxのトリックを行いました。ユーザーはzipをダウンロードし、解凍してアプリケーションを起動します。完璧。Mac OS X用SwingアプリケーションへのJREの埋め込み

しかし、私は同じことをMac OS Xに提供しなければなりません。私はそのことについて多くのことを読んだり、話したりしています(Mac上でJREを配布することは禁じられています。 Macなど)、私は本当に私ができることについては本当に混乱しています。

誰も既にこのようなことをしましたか?どのようにしてMacアプリケーションの展開を解決しましたか?ボーナスとして、私のアプリケーションをMac(zip?)で配布するのに最適なフォーマットは何ですか?

+2

[Excelsior JET](http://www.excelsior-usa.com) /jet.html)? –

+1

Launch4jはどうですか?そしてチェックする[this](http://stackoverflow.com/questions/9761518/macos-executable-of-a-jar-file) –

+0

@NikolayKuznetsov Launch4JはWindowsの '.exe'ランチャーをビルドするためだけです。ランチャーの_構築はMac/Linux上で行うことができますが、結果のランチャーはWindows上でのみ実行されます。 –

答えて

1

私はあなたが安全にJREがすでにMacに存在していると思うと思います。

「App」バンドルのtar.gz(ファイル属性を保持するための)ベストフォーマットです(Macユーザーではないと言われています)。

"jarbundler"(http://sourceforge.net/projects/jarbundler/)を使って、適切なMac "バンドル"を作成することができます。バンドルに含まれているスタブがAnt tarタスク内から「実行可能」とマークされていることを確認してください。

複数のJREがインストールされているといくつかの問題があると思います。この場合、アプリケーションに必要なJREバージョンを開始するには、正しいスタブを使用する必要があります。私が正しくリコール場合は、このスタブが/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub

に位置していますJava7とjarbundlerに問題があるかもしれないことを示しているページがあります:http://informagen.com/JarBundler/

+0

"私は埋め込まれたjreを使ってスイングアプリケーション*を出荷しなければなりません*"とはおそらく、すでにインストールされているものについての何らかの前提が役に立たないことを意味します。 – OrangeDog

+0

@OrangeDog:しかし、OPも述べました: "*私はおそらくできることについては本当に混乱しています*" –

+1

@a_horse_with_no_name Macには常にJREが存在するとは限りません。 10.8.2のAppleからの最近のJavaアップデートを見ると、Java 6 Systemパッケージを提供するプロセスが完全にフェードアウトしています。 –

3

はjava.net上appbundlerプロジェクトを見てください。これは、アプリケーションを通常のMac .appバンドルとしてパッケージ化するAntタスクを提供し、埋め込みJREをオプションで含めることができます。

AppleのJava 6リリースが提供され維持されている移行期にまだあるため、MacのJava環境全体はちょっと混乱しています。 a_horse_with_no_nameによって参照されるjarbundlerプロジェクトは、Mac OS X 10.5/6/7に含まれているApple提供のJava 6で実行されるが、Java Java 7ではなく、逆にappbundlerターゲットで実行される.appバンドルとしてJARをラップするためのものですOracle Java 7とその.appバンドルはJava 6では実行されません。

10.7または10.8を実行している最近のMacを対象としたい場合、特にMac App Store経由でアプリケーションを配布する場合は、 appbundlerを使用し、JREのコピーをバンドルします。ストア経由で配布したくない場合、埋め込みJREはオプションです。あなたのアプリがJava 6で実行できる場合、jarbundlerを使ってApple Java 6を対象とすると、あなたのアプリは古い(< = 10.6)Macで動くことになります。しかし、Java 7しか持っていない最近のMacをお持ちの方は、あなたのアプリを試して実行する際にJava 6をダウンロードしてインストールするように求められます。

それはContents/MacOSディレクトリ(および組み込みJREで適切なファイル該当する場合)アプリ内部のすべて限り、.zipアーカイブにzipファイルに実行権限をでマークされ.appを配布するために罰金です。あなたがAntでビルドしている場合は、filemode<zipfileset>を使用する必要があります。

+0

'jarbundler'で対象とするJavaのバージョンは、間違っていなければStubが含まれるだけです。したがって、Java7用のスタブを取得できれば、jarbundlerにも使用できます。私はJava5からJava6へのアップグレードのためにこれをやった(明らかに他のMacユーザーの助けを借りて)。 ZIPファイル内で実行許可を指定することはできないため、ZIPファイルは機能しません。これはtarファイルのみです。 –

+1

@a_horse_with_no_name Apple Javasが使用する 'Info.plist'フォーマットと互換性のあるJava 7のスタブは存在しません.Oracleバージョンでは、別のAPIを使用してスタブからVMを起動します。 ZIPファイルにはパーミッション情報が格納されています(技術的には、コアスペックの一部ではなくinfozip拡張ですが、デファクトスタンダードです)。 –

+0

ああ、私はスタブについては知らなかった。しかし、私はファイルのアクセス許可を含むZIPファイルを見たことがありません(そして私はAntのzipタスクがそれをまったくサポートしているとは思わない)。あなたはそれについて私に参考にしてもらえますか? –

2

最も簡単なのアプローチでは、他のプラットフォームと同じJARを使用し、Java Web Startでデプロイします。私はこれを使ってJREをインストールしようとしたことはありません。

の方がマックフレンドリーな環境を提供するには、記事番号hereで説明されているアプリケーションバンドルにJARをラップする必要があります。好ましい配信形式は、圧縮されたdisk image,.dmgです。

記事Java Deployment Options for Mac OS Xは、両方のオプションを比較します。このgameはどちらの方法でも起動できる例です。

補足:Mac OS X Finderは、デフォルトでJWSランチャーで開いた.jnlpファイルをドキュメントとして扱います。私は頻繁に使用されるいくつかのファイルのフォルダをdockフォルダに保存して、素早くアクセスできます。 Java Preferencesコントロールパネルでは、キャッシュされたアプリケーションの管理が可能です。ショートカットをインストールすることを選択すると、宛先フォルダにシンプルなMacアプリケーションバンドルが作成され、含まれているInfo.plistは他のものと同様に編集できます。 .plistのカスタマイズは、画面のメニューバー、ドックの名前とアイコン、JNIのパスなど、アプリケーションに必要な機能に左右されます。

+0

その比較リストはOS Xで完全に正しいですか?アプリケーションバンドル? OTOH 1)a)JWSデスクトップショートカットは機能しませんか? b)JWSアプリケーションをしないでください。 Windowsの「アプリケーションの追加と削除」アプレットに対応するOS Xに表示されますか? 2)それは可能ではありませんか? 3)アイコン!私に休憩を与えなさい。4)議論がない。 5)文書型は、JNLPに関心を示すことによって利用可能である。だから疑問の余地のあるカップルと、そのリストにある1〜2つの本当に疑わしい声明。 –

+1

@AndrewThompson:私は(最近取得した)1)a&bの理解を詳しく説明しようとしました。私は2)〜5)をもっと見る必要があります。 – trashgod

関連する問題