Javaは私の好みのプログラミング言語の1つです。アプリケーションをエンドユーザーに配布するという問題に常に遭遇します。
ユーザーにJARを提供することは、ユーザーが使いやすいとは限らないため、Java WebStartを使用するにはWebサーバーを維持する必要があります。
Javaアプリケーションを配布する最良の方法は何ですか?Javaアプリケーションがユーザーのコンピューターにアーティファクトをインストールする必要がある場合はどうですか?良いJavaインストール/パッケージングシステムはありますか?
配布要件に応じて、さまざまなソリューションがあります。
Jarを使用するだけです。これは、ユーザーに正しいJavaバージョンがインストールされていることを前提としています。そうでない場合、ユーザーは「クラスファイル形式バージョン」例外を受け取ります。
Launch4jとNSISなどのインストーラーを使用します。これにより、より多くの制御が可能になりますが、ユーザーはJavaランタイムをアンインストールするなどの愚かなことを行うことができます。これはおそらく最も一般的なアプローチであり、現在使用しています。
Webstartを使用します。これは、ユーザーに正しいJavaバージョンがインストールされていることを前提としていますが、作業はずっと簡単です。私の経験では、イントラネット環境を厳密に制御するには問題ありませんが、 Java 1.7。の新しいプラグインテクノロジーで改善される可能性があります。
Excelsior JETなどのネイティブコードコンパイラを使用して実行可能ファイルとして配布するか、インストーラーでラップします。高価であり、通常は少し古いバージョンのJavaに結びつきます。また、動的なクラス読み込みには多少の苦痛がありますが、サポートの手間を最小限に抑える必要がある大規模な展開には非常に効果的です。
高度なインストーラー は、JavaアプリをWindows実行可能ファイルとして簡単にパッケージ化できます。また、セットアップの方法は非常に柔軟です。 Java Windowsクライアントへのアプリケーション、これが最も簡単な方法です。
JSmooth は、jarを取得して標準のWindows実行可能ファイルにラップする単純なプログラムです。必要なJVMを設定したり、アプリケーションにバンドルしたり、まだインストールされていない場合はダウンロードするオプションを提供したりできるシンプルなGUIが付属しています。 exeファイルをそのまま送信するか、可能な依存関係でZipする(または、起動時にネットから追加の依存関係をダウンロードさせる)ことができます。ビールやスピーチのように無料でもありますが、それは良いことかもしれませんし、そうでないかもしれません。
これは、ターゲットユーザーの洗練度に依存します。ほとんどの場合、Javaベースのアプリを実行しているという事実からそれらを分離する必要があります。正しいこと(スタートメニューエントリ、ランチャーの作成、プログラムの追加/削除など)を実行し、既にJavaランタイムをバンドルしているため、ユーザーはクロスプラットフォームインストールツール、 BitRock InstallBuilder をお勧めします。Javaベースではありませんが、一般的にJavaアプリケーション。Antと簡単に統合でき、Unix/Linux/MacなどからWindowsインストーラーをビルドできます。生成されたインストーラーはネイティブであるため、自己解凍手順やJREは不要です。ターゲットシステムに既に存在しているため、インストーラーが小さくなり、頭痛の種が減ります。また、オープンソースプロジェクトの無料ライセンスがあることにも言及したいと思います。
実行可能ファイルは最適ですが、プラットフォームに制限があります。つまり、Linuxではgcj: http://gcc.gnu.org/Java/ を使用して実行可能ファイルを生成し、launch4jを使用します: http://launch4j.sourceforge.net/ は、Windows実行可能ファイルを生成します。 Linuxでパッケージ化するには、任意のrpmまたはdebパッケージャーを使用できます。 win32の場合 http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System を試してください
GUIを備えた実際のエンドユーザーアプリケーションの場合は、プログラム(Java)を記述した言語を無視し、選択したプラットフォームごとにネイティブインストーラーを使用する必要があります。 Macユーザーは.dmgが必要であり、Windowsでは.msiまたは.exeインストーラーが最適です。 Windowsでは、NullSoftのNSISを好みます。これは、InstallShieldやInstallAnywhereよりも不快感が少ないからです。 OSXでは、JVMがすでに存在していることを期待できます。 Windowsでは、必要に応じてそれらを確認してインストールする必要があります。 Linuxのユーザーは、Java GUIアプリケーションを実行しません。いくつかのGUIアプリケーションは、実行可能.jarで何をすべきかを知っています。
[〜#〜] nsis [〜#〜] (Nullsoft Scriptable Installer System)を自分で使用したことはありませんが、必要なJREがターゲットにインストールされているかどうかを確認するインストールスクリプトがあります。システム。
次のような多くのサンプルスクリプトが Code Examples および Real World Installers ページから利用できます。
(私は実際にスクリプトを使用していないことに注意してください。そのため、これを推奨として受け取らないでください。)
プロジェクトとその依存関係を単一のjarファイルにパッケージ化する方法が必要でした。
Maven2 Assemblyプラグインを使用して必要なものを見つけました: Maven2 Assembly plugin
これは one-jar の機能を複製しているように見えますが、追加の設定は必要ありません。
単純なJava私はJarを使用したいアプリ。
Java -jar jarname.jar
私見、jarはシンプルさが主な要件である場合に行く方法です。
Eclipse RCPアプリケーションを開発しています。通常、Eclipseアプリケーションを起動するには、実行可能ランチャーが含まれています。適切なJavaバージョンが使用されるようにするために、/ jreサブディレクトリのアプリケーションフォルダー内にJava仮想マシンを含めます。
次に、ユーザーのマシンにインストールするためにInno Setupでパッケージ化します。
Javaアプリケーションを配布する最良の方法は何ですか?Javaアプリケーションがユーザーのコンピューターにアーティファクトをインストールする必要がある場合はどうですか?良いJavaインストール/パッケージングシステムはありますか?
私の経験では( 多くのオプションの評価 から)、 install4j は良い解決策です。任意のプラットフォーム用のネイティブインストーラーを作成し、Javaアプリをインストールすることを目的としています。詳細については、そのWebサイトの「 Features 」を参照してください。
ただし、install4jは商用ツールです。特に、ニーズが比較的単純な場合(アプリケーションを配布してアーティファクトをインストールするだけ)、無料のオプション( izPack または前述の Lauch4j など)を含む他の多くの優れたオプションが存在します。しかし、あなたはbestの方法を求めましたが、私の知る限り、特に大きいまたはより複雑なJava(EE)アプリ。
installanywhereは良いが高価なもの-良い無料のものを(まだ)見つけていない