誰かが特定のJREをコンパイルされたJavaアプリケーションと一緒にパックする方法を知っていますか?現在、実行可能なjarファイルがあり、その中にJRE 6Update31を入れたいと思っています。クライアントがインストールしたJREのバージョンに関係なく、アプリケーションが出荷されたJREを使用するようにします。ソリューションはプラットフォームに依存せずに機能する必要があります。
何か案は?よろしくお願いします!
誰かが特定のJREをコンパイルされたJavaアプリケーションと一緒にパックする方法を知っていますか?現在、実行可能なjarファイルがあり、その中にJRE 6Update31を入れたいと思っています。クライアントがインストールしたJREのバージョンに関係なく、アプリケーションが出荷されたJREを使用するようにします。ソリューションはプラットフォームに依存せずに機能する必要があります。
何か案は?よろしくお願いします!
jreをターゲットプラットフォーム(Windows 64ビットなど)にjre
インストールしている場合は、Javaインストールのフォルダーの下にあるものをすべてコピーして、ディストリビューションに配置します。次に、システムファイルではなくローカルjreを指すバッチファイルを作成します。
これが私がすることです:
dist
フォルダにありますjre
システムフォルダをにコピーしますdist\jre-win-1.7.0_04
jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar
..ブーム、完了!バッチファイルをダブルクリックすると、ローカルjreでjarファイルが実行されます。自分で証明するには、システムjreをアンインストールし、バッチファイルをダブルクリックします。まだ動作します。
LinuxまたはOSXでも同様の方法でこれを行うことができます。
また、これはかなり一般的な方法であり、多くのJavaディストリビューションはこのように行われていることも指摘しておきます。だから、できない、またはすべきではないと言ってはいけません。
ただし、いくつかの注意点があります。これにより、ディストリビューションが大きくなり、プラットフォームに依存します。私の例では、Windowsx64です。ただし、それは実行可能で管理可能です。jreでサポートされているプラットフォームの数には限りがあり、何を推測しますか...それらもプラットフォームに依存します。
OSXでは、Javaを提供するAppleからJavaを提供するOracleに移行しています。これは、OSXの新規インストールではJavaがインストールされないことも意味します。Oracleは、Javaインストールをパックするためのツールを提供しており、インストールの一部としてjreを提供することを強くお勧めします。これの利点は、顧客がアプリケーションを実行するために追加のパッケージをインストールする必要がないことです。また、アプリケーションを正しいJavaランタイムに対してテストし、出荷前に非互換性がないことを確認できます。欠点は、インストーラーの構築が少し複雑になり、ダウンロードサイズが大きくなることです。
もちろん、Windows、Linux ectera用のアプリケーションを提供する場合、インストーラーの構築はより複雑になり、実行可能jarを提供する方がはるかに簡単ですが、これは顧客が望むエクスペリエンスではありません。お客様は、1つのアプリケーションをダウンロードして、Windows、OSX、およびLinuxで同じexeを実行できることを期待していません。
プラットフォームごとに異なるインストーラーが用意されていることを嬉しく思います。また、インストーラーが異なる方法で機能することを期待しています。
これが私のやり方です:
OSX:バンドルされたjreでAppBundlerを使用し、DMGCanvasでDmgに配置します。ユーザーは、アプリケーションを/Applicationフォルダーにドラッグするだけです。
Windows:launch4jでラップされたバンドルされたjreでIzpackを使用して、インストーラーをexeとして実行できるようにします。
Linux:ユーザーのLinuxユーザーは自分のマシンの内容を正確に制御したいので、バンドルされたjreなしでIzpackを使用しますが、許可されるJavaの最小バージョンを指定します。理想的には、rpmなどのメインのLinuxパッケージマネージャー用のパッケージを作成する必要がありますが、Linuxユーザーは私のクライアントベースのごく一部であるため、現時点ではこれは努力する価値がないと判断しました。
ほとんどのインストールはMavenとAntを使用して自動化されているため、これらのさまざまなインストーラーを構築するのはそれほど大きな労力ではありません。
市販の製品でも同じ状況です。特定のバージョンのWindowsとLinuxの両方のJREをダウンロードし、IzPackを使用してアプリケーションにパックしました。
アプリをインストールする場合は、「当社の」JREをインストールする必要があります。アプリは、システムにインストールされているJREまたはJDKに関係なく、そのJREによって実行されます。
欠点は次のとおりです。インストーラーはWindowsまたはLinux用に作成され、サイズは約50MBです。開梱時のモジュールのサイズは次のとおりです。
より「プラットフォームに依存しない」ようにしたい場合は、両方のJREをパックする必要があります。これはインストーラーで最大100MBになります。また、2種類のプラットフォームでのみ有効です(クトゥルフの回答を参照)。
ほとんどの場合、リモートインストールはSSH経由で行い、圧縮オプションを使用すると、パッケージ時間が少なくとも10倍(数分から数十分)増加することに注意してください。
Oracleが提供するかなり新しいソリューションは次のとおりです。
それは読みます:
自己完結型のアプリケーションパッケージには、次の利点があります。
ユーザーは、使い慣れたインストーラーを使用してアプリケーションをインストールし、通常の方法で起動します。
アプリケーションが使用するJREのバージョンを制御します。
アプリケーションは、JREをインストールする必要なしに、新しいシステムにデプロイできます。
ただし、このアプローチの欠点は次のとおりです。
自己完結型のアプリケーションパッケージは、JDK 7Update6以降を使用してのみビルドできます。
このバンドル(アプリケーション+ JRE)の配布を計画している場合は、Javaアプリケーションのネイティブインストーラーとアプリケーションランチャーを生成する強力なマルチプラットフォームJavaインストーラービルダーであるユーティリティinstall4Jがあります。
存在しない場合はjreの特定のバージョンをダウンロードできるようにするjavawebstartを使用してデプロイできます。ただし、ダウングレードが可能かどうかはわかりません。Javaもすでにインストールされている必要があります。
NetBeansプラットフォームアプリケーションの場合、NetBeans自体に追加のリソースとJREをバンドルするオプションがあります。
ソース:https ://platform.netbeans.org/tutorials/nbm-nbi.html#bundling-jre
これは直接不可能です。これを可能にするには、すべてのプラットフォームのVMをダウンロードする必要があります。Windowsの場合は、JREをディレクトリとjarにコピーし、シェルスクリプトによって分散JVMを呼び出します。しかし、これは非常に難しいので、クトゥルフが説明した解決策が最適です。つまり、バージョンを確認してWebページをポイントします。
ただし、チェックアウトする可能性のあるものがいくつかあります。
JSmooth- http: //jsmooth.sourceforge.net/
Jar2Exe- http: //transfer2pc.weebly.com/1/post/2011/10/jar2exe-converter-11-gui.html