しばらく前から、私たちの Java アプリケーションは Windows 上の JRE にあらかじめバンドルされています。アプリケーションが事前にバンドルされている JRE を使用するように、C で記述された小さなランチャー アプリがあります。現在、Apple が Java をゆっくりと消滅させようとしていますが、OSX で同様のことを行うのが賢明であると判断しました。OSX で事前にバンドルされた JRE を使用する最良の方法は何でしょうか?
5 に答える
私は@Danielが彼の回答でリンクしているブログ投稿の著者です。OpenJDKを正常にバンドルし、MacAppStoreでJavaアプリを公開しました。
まず、受け入れられた回答のいくつかの問題を修正させてください。
- OpenJDKをバンドルして再配布することは完全に合法です。
- OpenJDKはLionだけで動作するのではなく、Lion以前からMountainLionまで使用しました。ただし、32ビットOSで動作するには、パッチを適用する必要があります。
- OpenJDKはベータ品質ですが、複雑なSwingアプリケーションを実行することは引き続き許容されます。OSXにはいくつかの問題がありますが、この投稿でそれらを修正する方法を説明しました。
@Matteoの回答で説明されているように、スクリプトを作成する必要はありません。Oracleによって公開されているAppBundlerというアプリケーションを使用して、アプリケーションを起動し、ネイティブバンドルを作成するネイティブ実行可能ファイルを作成できます。AppBundlerは、起動する実行可能ファイルの名前、Java引数など、アプリケーションの起動方法に関する情報を含むInfo.plistファイルも生成します。
10.7.5以降では、アプリが正体不明の開発者からのものであることを示すダイアログをユーザーが最初に表示したくない場合は、アプリがGatekeeperと互換性があり、署名されている必要があります(したがって、有料のMac開発者プログラムに登録する必要があります)。それを開きます。
App Storeにデプロイするには、アプリがサンドボックス環境でも機能する必要がありますが、AppStoreの外部に配布する場合は厳密な要件ではありません。
AppBundlerにはいくつかの便利な機能がないことに注意してください。このフォークに興味があるかもしれません。
私が悪い考えだと思ったとしても (以下を参照)、OpenJDK のような JVM をバンドルして、java
実行可能ファイルを呼び出す小さなスクリプトでアプリケーションを起動することができます。
注意: JVM の再配布が (合法的に) 許可されているかどうかはわかりません。ダウンロードする前に契約を確認する必要があります。
最初の問題は、現時点では Apple のバージョンまたはOracle Java 7u6 Mac OS X Port Developer Preview Release (これは単なるプレビューです) しかないことです。(例: http://jdk7.java.net/macportpreview/ )。これは、将来、Apple が独自のバージョンの提供を停止するときに変更されます。そのため、現時点では、Lion のみで実行されているプレビューに行き詰まっています。しかし、私はあなたに例を示します。
インストーラーをダウンロードし、ディスク イメージをマウントし、プラグインを右クリックして [パッケージの内容を表示] を選択し、
Home
フォルダーを抽出します。JRE が含まれています。次に、で確認できます
$ ./Home/bin/java java version "1.7.0_06-ea" Java(TM) SE Runtime Environment (build 1.7.0_06-ea-b18) Java HotSpot(TM) 64-Bit Server VM (build 23.2-b08, mixed mode)
Home
次に、次のような名前に変更しますjre
このフォルダをアプリケーションにパッケージ化する場合は、小さなスクリプトを含める必要があります。
#!/bin/sh ./jre/bin/java -classpath myniceapplication.jar
アプリケーションをビルドできるようにするには、
applicationname.app/Contents/MacOS
スクリプトを含むフォルダーが必要です (名前はapplicationname
)。これらのスクリプトで絶対パスを使用する必要があるようです
/Path/applicationname.app/Contents/MacOS/jre/bin/java -classpath myniceapplication.jar
Mac OS X アプリケーション バンドルを構築するためのより良い解決策があると思いますが、私は専門家ではありません。この例は、それが機能することを示すためのものです。
要約:
JRE の再配布が許可されているかどうかを確認します (およびその条件を確認します)。
JREセキュリティアップデートがあるたびに、アプリケーションを最新の状態に保ち、アプリケーションを更新する必要があるため、私はそれをしません
ユーザーとして、JRE を取得するためにランダムな開発者よりも Oracle を信頼します (個人的なことは何もありません :-)。
このブログ投稿には、アプリにJREをバンドルし、AppStoreに送信できるようにするための詳細な手順がいくつかあります。
Apple で配布するためにJREをバンドルする方法に関する Oracle 自身のステップバイステップ ガイドを次に示します。