119

Java は、私が選んだプログラミング言語の 1 つです。アプリケーションをエンドユーザーに配布する際に、常に問題に遭遇します。

ユーザーに JAR を提供することは、私が望むほどユーザーフレンドリーであるとは限りません。Java WebStart を使用するには、Web サーバーを維持する必要があります。

Java アプリケーションを配布する最良の方法は何ですか? Java アプリケーションが成果物をユーザーのコンピューターにインストールする必要がある場合はどうすればよいでしょうか? 適切な Java インストール/パッケージング システムはありますか?

4

15 に答える 15

90

配布要件に応じて、さまざまなソリューションがあります。

  1. 瓶を使うだけです。これは、ユーザーが正しい Java バージョンをインストールしていることを前提としています。そうでない場合、ユーザーは「class-file format version」例外を受け取ります。これは、社内の内部配布に適しています。

  2. launch4j と NSIS のようなインストーラーを使用します。これにより、より多くの制御が可能になりますが、ユーザーは Java ランタイムのアンインストールなどの愚かなことを行うことができます。これはおそらく最も一般的なアプローチであり、私が現在使用しているものです。

  3. ウェブスタートを使用します。これは、ユーザーが正しい Java バージョンをインストールしていることも前提としていますが、作業はずっと簡単です。私の経験では、これは厳密に制御されたイントラネット環境では問題ありませんが、多くの奇妙な障害が発生するため、大規模な展開では苦痛になります. Java 1.7 の新しいプラグイン技術で改善されるかもしれません。

  4. Excelsior JET などのネイティブ コード コンパイラを使用して、実行可能ファイルとして配布するか、インストーラーにラップします。高価で、一般的に少し古いバージョンのJavaに縛られ、動的なクラスローディングには多少の苦痛がありますが、サポートの手間を最小限に抑える必要がある大規模な展開には非常に効果的です.

于 2008-09-17T06:45:54.263 に答える
6

高度なインストーラーを使用すると、Java アプリを Windows 実行可能ファイルとして簡単にパッケージ化でき、セットアップ方法も非常に柔軟です。Java アプリケーションを Windows クライアントに配布するには、これが最も簡単な方法であることがわかりました。

于 2008-09-17T06:45:44.577 に答える
5

JSmoothは、jarを取得し、それを標準のWindows実行可能ファイルにラップする単純なプログラムです。必要なJVMを構成したり、アプリケーションにバンドルしたり、まだインストールされていない場合はダウンロードするオプションを提供したりできるシンプルなGUIが付属しています。exeファイルをそのまま送信するか、依存関係の可能性があるzipファイルを作成できます(または、起動時にプログラムにネットから追加の依存関係をダウンロードさせます)。ビールやスピーチのように無料ですが、それは良いことかもしれませんし、そうでないかもしれません。

于 2008-09-21T20:10:32.900 に答える
4

ターゲット ユーザーがどれだけ洗練されているかによって異なります。ほとんどの場合、Java ベースのアプリを実行しているという事実からそれらを分離したいと考えています。適切な処理 (スタート メニュー エントリ、ランチャーの作成、プログラムの追加/削除への登録など) を実行し、既に Java ランタイムがバンドルされているネイティブ インストーラーを提供します (したがって、ユーザーはそれを知る必要も気にする必要もありません)。私たちのクロスプラットフォーム インストール ツール、 BitRock InstallBuilderを提案したいと思います。. Java ベースではありませんが、Java アプリケーションのパッケージ化によく使用されます。Ant と簡単に統合でき、Unix/Linux/Mac やその逆から Windows インストーラーをビルドできます。生成されたインストーラーはネイティブであるため、自己解凍手順や JRE がターゲット システムに既に存在している必要はありません。また、オープンソース プロジェクトの無料ライセンスがあることにも言及したいと思います。

于 2009-01-18T12:07:53.930 に答える
4

実際の G​​UI を持つエンド ユーザー アプリケーションの場合は、プログラムを作成した言語 (Java) を無視し、選択したプラットフォームごとにネイティブ インストーラーを使用する必要があります。Mac ユーザーは .dmg を必要とし、Windows では .msi または .exe インストーラーが適しています。Windows では、InstallShield や InstallAnywhere よりも好ましくないという理由だけで、NullSoft の NSIS を好みます。OSX では、JVM がすでに存在していると期待できます。Windows では、必要に応じてチェックしてインストールする必要があります。Linux の人々は Java GUI アプリケーションを実行することはなく、実行可能な .jar の扱いを知っている人はほとんどいません。

于 2008-09-17T05:00:54.767 に答える
3

私自身はNSIS (Nullsoft Scriptable Installer System) を使用したことはありませんが、必要な JRE がターゲット システムにインストールされているかどうかを確認するインストール スクリプトがあります。

Code ExamplesおよびReal World Installersページから、次のような多くのサンプル スクリプトを入手できます。

(実際にスクリプトを使用したことはないので、推奨とは見なさないでください。)

于 2008-09-19T12:57:49.603 に答える
2

実行可能ファイルが最適ですが、プラットフォームに制限があります。つまり、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を試してください

于 2008-09-17T04:55:34.763 に答える
2

プロジェクトとその依存関係を 1 つの jar ファイルにパッケージ化する方法が必要でした。

Maven2 Assembly プラグインを使用して必要なものを見つけました: Maven2 Assembly plugin

これはone-jarの機能を複製しているように見えますが、追加の構成は必要ありません。

于 2008-09-26T21:37:14.683 に答える
1

私はEclipseRCPアプリケーションを開発しています。通常、Eclipseアプリケーションを起動するために、実行可能なランチャーが含まれています。正しいJavaバージョンが使用されるように、/jreサブディレクトリのアプリケーションフォルダ内にJava仮想マシンを含めます。

次に、ユーザーのマシンにインストールするためにInnoSetupでパッケージ化します。

于 2008-09-17T07:48:16.067 に答える
1

Javaアプリケーションを配布するための最良の方法は何ですか?Javaアプリケーションがユーザーのコンピューターにアーティファクトをインストールする必要がある場合はどうなりますか?そこに良いJavaインストール/パッケージングシステムはありますか?

私の経験では(多くのオプションを評価して)、install4jは優れたソリューションです。あらゆるプラットフォーム用のネイティブインストーラーを作成し、特にJavaアプリのインストールを対象としています。詳しくは、ホームページの「機能」をご覧ください。

ただし、install4jは商用ツールです。特に、ニーズが比較的単純な場合(アプリケーションを配布し、いくつかのアーティファクトをインストールするだけ)、無料のもの(izPackやすでに述べたLauch4jなど)を含む他の多くの優れたオプションが存在します。しかし、あなたは最善の方法を求めました。私の現在の知識では、特に大規模またはより複雑なJava(EE)アプリを配布する場合はinstall4jが最適です。

于 2009-05-10T09:22:41.047 に答える
1

単純な Java アプリの場合は、Jar を使用するのが好きです。ユーザーがクリックするだけで 1 つのファイルを配布するのは非常に簡単です (Windows)。

java -jar jarname.jar

IMHO、シンプルさが主な要件である場合は、jar が最適です。

于 2008-09-17T04:55:29.367 に答える
0

私の見解では、優れた配布メカニズムは、ClickOnceWebStartテクノロジなどを使用することです。バージョンをサーバーにデプロイするだけで、バージョンがリリースされたときにクライアントに自動的に取得されます。また、Eclipse RCP プラットフォームには、WebStart が行うことだけでなく、それ以上のことを行う UpdateManager が含まれています。

私はビルドに Maven2 を使用しているので、デプロイは簡単です。ビルドされた jar をサーバー上の場所にコピーし、必要に応じて jnlp ファイルを更新すれば完了です。

于 2008-09-17T06:24:55.283 に答える
0

最適な答えは、プラットフォームによって異なります。Windows での展開では、one-jarlaunch4jの組み合わせを使用して良い結果が得られました。ビルド環境 (主に ant スクリプト) を適切にセットアップするのに少し時間がかかりましたが、今ではかなり楽になりました。

于 2008-09-17T04:58:58.577 に答える
0

installanywhere は良いですが、高価なものです - 私は (として) 良い無料のものを見つけていません

于 2008-09-24T12:53:42.707 に答える
-2

jar ファイルを、他の依存 jar、構成ファイル、およびドキュメントと一緒に、run.bat/run.sh とともに圧縮します。エンド ユーザーはそれを任意の場所に解凍し、必要に応じて run.bat を編集できる必要があります (ほとんどの場合、編集せずに実行する必要があります)。スタート メニュー、デスクトップ、システム トレイなどにエントリを作成する場合は、インストーラが役立つ場合があります。

ユーザーとして、私は解凍してインストールを実行することを好みます (スタート メニューのエントリは使用しないでください)。ただし、IT 業界以外の人は好みが異なる場合があります。そのため、アプリケーションが主に開発者向けである場合、zip-run.bat ルートと一般向けのアプリケーションは、インストーラーを使用してインストールできます。

于 2008-09-17T08:08:53.817 に答える