39

誰かが特定のJREをコンパイルされたJavaアプリケーションと一緒にパックする方法を知っていますか?現在、実行可能なjarファイルがあり、その中にJRE 6Update31を入れたいと思っています。クライアントがインストールしたJREのバージョンに関係なく、アプリケーションが出荷されたJREを使用するようにします。ソリューションはプラットフォームに依存せずに機能する必要があります。

何か案は?よろしくお願いします!

4

9 に答える 9

86

jreをターゲットプラットフォーム(Windows 64ビットなど)にjreインストールしている場合は、Javaインストールのフォルダーの下にあるものをすべてコピーして、ディストリビューションに配置します。次に、システムファイルではなくローカルjreを指すバッチファイルを作成します。

これが私がすることです:

  • 私のjarファイルはdistフォルダにあります
  • jreシステムフォルダをにコピーしますdist\jre-win-1.7.0_04
  • 次の行を含む.batファイルを作成します jre-win-1.7.0_04\bin\java.exe -jar MyProgram.jar

..ブーム、完了!バッチファイルをダブルクリックすると、ローカルjreでjarファイルが実行されます。自分で証明するには、システムjreをアンインストールし、バッチファイルをダブルクリックします。まだ動作します。

LinuxまたはOSXでも同様の方法でこれを行うことができます。

また、これはかなり一般的な方法であり、多くのJavaディストリビューションはこのように行われていることも指摘しておきます。だから、できない、またはすべきではないと言ってはいけません。

ただし、いくつかの注意点があります。これにより、ディストリビューションが大きくなり、プラットフォームに依存します。私の例では、Windowsx64です。ただし、それは実行可能で管理可能です。jreでサポートされているプラ​​ットフォームの数には限りがあり、何を推測しますか...それらもプラットフォームに依存します。

于 2012-11-16T20:15:00.607 に答える
31

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を使用して自動化されているため、これらのさまざまなインストーラーを構築するのはそれほど大きな労力ではありません。

于 2012-12-14T10:04:54.103 に答える
9

市販の製品でも同じ状況です。特定のバージョンのWindowsとLinuxの両方のJREをダウンロードし、IzPackを使用してアプリケーションにパックしました。

アプリをインストールする場合は、「当社の」JREをインストールする必要があります。アプリは、システムにインストールされているJREまたはJDKに関係なく、そのJREによって実行されます。

欠点は次のとおりです。インストーラーはWindowsまたはLinux用に作成され、サイズは約50MBです。開梱時のモジュールのサイズは次のとおりです。

  • アプリ自体〜5MB
  • libs〜10 MB
  • JRE〜90 MB

より「プラットフォームに依存しない」ようにしたい場合は、両方のJREをパックする必要があります。これはインストーラーで最大100MBになります。また、2種類のプラットフォームでのみ有効です(クトゥルフの回答を参照)。

ほとんどの場合、リモートインストールはSSH経由で行い、圧縮オプションを使用すると、パッケージ時間が少なくとも10倍(数分から数十分)増加することに注意してください。

于 2012-10-24T09:06:47.497 に答える
6

Oracleが提供するかなり新しいソリューションは次のとおりです。

自己完結型パッケージ

それは読みます:

自己完結型のアプリケーションパッケージには、次の利点があります。

  • ユーザーは、使い慣れたインストーラーを使用してアプリケーションをインストールし、通常の方法で起動します。

  • アプリケーションが使用するJREのバージョンを制御します。

  • アプリケーションは、JREをインストールする必要なしに、新しいシステムにデプロイできます。

ただし、このアプローチの欠点は次のとおりです。

自己完結型のアプリケーションパッケージは、JDK 7Update6以降を使用してのみビルドできます。

于 2017-07-28T13:47:43.793 に答える
5

このバンドル(アプリケーション+ JRE)の配布を計画している場合は、Javaアプリケーションのネイティブインストーラーとアプリケーションランチャーを生成する強力なマルチプラットフォームJavaインストーラービルダーであるユーティリティinstall4Jがあります。

于 2012-10-24T08:54:26.043 に答える
3

存在しない場合はjreの特定のバージョンをダウンロードできるようにするjavawebstartを使用してデプロイできます。ただし、ダウングレードが可能かどうかはわかりません。Javaもすでにインストールされている必要があります。

于 2012-10-24T08:53:49.397 に答える
2

JARファイルの隣に配置されたJREを使用するプラットフォーム固有のランチャーが必要です。もちろん、これはバッチファイルとシェルスクリプトを使用して行うことができますが、install4jなどのネイティブランチャーを作成するより専門的なソリューションがあります。(免責事項:私の会社はinstall4jを開発しています)。無料のソリューションはizpackです。

于 2012-10-24T08:53:00.543 に答える
1

NetBeansプラットフォームアプリケーションの場合、NetBeans自体に追加のリソースとJREをバンドルするオプションがあります。

ソース:https ://platform.netbeans.org/tutorials/nbm-nbi.html#bundling-jre

于 2017-11-29T21:08:59.797 に答える
0

これは直接不可能です。これを可能にするには、すべてのプラットフォームの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

于 2012-10-24T09:03:36.720 に答える