Javaアプリケーションを配布する最良の方法は何ですか?[閉まっている]


115

Javaは私のプログラミング言語の1つです。私は自分のアプリケーションをエンドユーザーに配布しているにもかかわらず、常に問題にぶつかります。

ユーザーにJARを与えることは、私が望むほどユーザーフレンドリーではない場合があり、Java WebStartを使用するには、Webサーバーを維持する必要があります。

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


Java WebStartは、CDやネットワークドライブなどのファイルシステムなど、任意のURLから使用できます。確かにそれはあなたに多くを与えません。注:Eclipseはインストーラーを使用せず、解凍して実行するだけです。おそらくあなたはインストーラーを必要としません。
Peter Lawrey、

1
最近では、そのようなJava WebStartアプリケーションをGoogle Application Engineなどにデプロイするのは非常に簡単です。
–ThorbjørnRavn Andersen 2013

6
この質問が閉じられているのは残念です。「主に意見に基づく」と述べた理由に同意しません。提供される回答は、意見ではなく経験に基づいています。私は常に経験に基づく良い答えを歓迎します。歴史から学ぶことができない人々はそれを繰り返す運命にあります。
bouvierr 2015

jlink(JDK 9で導入)を使用してJavaアプリを配布できます。JDKに付属しています。専用のJREが構築されます。クライアントマシンにJavaをインストールする必要はありません。
ブルーレイ

回答:


89

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

  1. 瓶を使うだけです。これは、ユーザーが正しいJavaバージョンをインストールしていることを前提としています。そうでない場合、ユーザーは「クラスファイル形式バージョン」の例外を受け取ります。これは、社内での内部配布には問題ありません。

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

  3. Webstartを使用します。これは、ユーザーが正しいJavaバージョンをインストールしていることも前提としていますが、作業ははるかに簡単です。私の経験では、これは厳密に制御されたイントラネット環境では問題ありませんが、いくつかの奇妙な障害があるため、大規模な展開では問題になります。Java 1.7の新しいプラグインテクノロジーで改善される可能性があります。

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


4
Webstartに関する注意事項:ユーザーが石器時代以外のバージョンのJavaをインストールしている限り(たとえば1.2)、Webstartは、プログラムに必要なバージョンの新しいJavaバージョンをダウンロードしてインストールするように指示できます。まだ。.jnlpファイルの構文を確認してください。もちろん、Javaを使用していることが目立つように表示されますが、クライアントによっては不適切な場合があります。そのような場合は、確かにある種の「ネイティブ」インストーラー/ファイル形式を使用して、実装の詳細を可能な限り隠す必要があります。
ダニエルシュネラー

10
Webstartは好きではありません。Java / Sunブランドが多すぎます。正しく機能させるのは難しいです。コード署名の設定は、それよりも面倒であり、ユーザーはセキュリティの利点やメッセージを理解していません。ユーザーシステムで何かを実行したい場合、恐ろしい警告を取り除くためにコード署名証明書に料金を支払う必要があります。これは、問題を引き起こす可能性のある多くの複雑なキャッシュを実行します。OSGiまたは今後のJavaモジュールが同様の自動更新の利点を提供する可能性があります。#2のバリエーションを使用して、すべてAntからDMG / Packager for macを作成します。
Cal

あなたが提案したように私はNSISを使いました。launch4jも確認しました。なぜ両方を使用することをお勧めしますか?
jacknad

1
@JackN NSISはインストーラージェネレーターです。Launch4jは、特にjavaプログラムの起動/起動を簡単にするためのものです。それらの機能にはいくつかの重複がありますが、それらは問題のさまざまな部分を対象としています。
Noel Grandin、2010年

すばらしい答えを+1。Excelsior JETの経験はありますか?x86アーキテクチャのみをサポートし、リアルタイムjarライブラリをロードできませんか?
KJW

6

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


5

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


4

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


3

実行可能ファイルは最高ですが、彼らはプラットフォームですすなわち使用GCJ制限:http://gcc.gnu.org/java/を生産する実行ファイルと使用launch4jへのLinuxの場合:http://launch4j.sourceforge.net/は、Windowsの実行ファイルを生成します。Linuxでパッケージ化するには、任意のrpmまたはdebパッケージャーを使用できます。Win32の場合は、http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_Systemを試してください


3

それが実際のGUIを備えたエンドユーザーアプリケーションである場合は、プログラム(Java)を記述した言語を無視し、選択したプラットフォームごとにネイティブインストーラーを使用する必要があります。Macの人々は.dmgを望んでおり、Windowsでは.msiまたは.exeインストーラーが適しています。Windowsでは、NullSoftからのNSISのほうがInstallShieldやInstallAnywhereより不快ではないという理由だけで好みます。OSXでは、すでにそこにあるJVMを信頼できます。Windowsでは、必要に応じて確認し、インストールする必要があります。Linuxの人々はJava GUIアプリケーションを実行することはなく、実行可能.jarをどうするかを知っている人もいます。


3
本当に?Linuxの人々はGUIアプリケーションを実行しませんか?それから彼のプログラムは彼らがディスカッション全体を論議するのに役に立たないと思います。
マット

@Mattなぜ、元のアプリケーションがGUIアプリケーションであると想定しているのですか?私はLinuxに多くのコマンドラインJavaアプリケーションをインストールしましたが、.debまたは.rpmsとしてダウンしたアプリケーションは特に高く評価されています。
Ry4an Brase 2012

1
元のタイトルはGUIでした。さらに、webstartが起動している場合、それはGUIアプリケーションであるに違いありません。最後に、LinuxユーザーがGUIアプリケーションを使用しないと言うのはまったく正しくありません。
Matt

Linuxの人々がGUIアプリケーションを実行しないとは言いませんでした。彼らは「Java GUI」アプリケーションを実行せず、NetBeansとEclipse(「実行可能なjarを使用して何をするかを知っている」でカバーしたもの)の外部では、広く使用されている1つとは思えないLinux上のJavaアプリケーション(Open OfficeなどはC ++であり、プラグインに対してのみJavaを使用します)。
Ry4an Brase 2012

SQLDeveloperについて聞いたことがありますか?または、Oracle管理ツールのいずれか?すべてJavaでコーディング(sqldeveloperは.exeとしてバンドルされることになりますが、Javaです)
Matt

3

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

次のような多くのサンプルスクリプトが、コード例ページとReal World Installersページから入手できます。

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


2

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

Maven2アセンブリプラグインを使用して必要なものを見つけました:Maven2アセンブリプラグイン

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


1

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

java -jar jarname.jar

私見、jarは、シンプルさが主な要件である場合に使用する方法です。


これを初心者に試してみると、うまく機能しないことがわかります。
rhody

1

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

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


1

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

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

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


Mac OSでJVM 5.0を強制的に実行する方法を知っていますか?WindowsではJREをバンドルするだけですが、Macでは別のデフォルトJVMが構成されている可能性があります。だから私はあなたが望む特定のJVMバージョンを使用するようにそれを明示的に強制する方法がわからない...
ステファン・グレニア

@Stephane、私は実際にinstall4jを使用してOS Xインストーラーを作成していませんが、柔軟なJREのバンドル/検出オプションがあれば問題にはならないと思います。それらについての詳細については、この答えでリンクをチェック:stackoverflow.com/questions/995881/...
Jonik

MacはJavaアプリバンドルの作成をサポートしているため、次のようにinfo.plistでJREを指定するだけです... <key> JVMVersion </ key> <string> 1.5 + </ string>プラスを削除して、特定のバージョンを要求できます。これが私のやり方ですが、install4jは使用していません。Web上でMac Appの作成を説明するページがたくさんあります。また、limewireまたはvuze(javaアプリ)がどのように実行するかを確認することもお勧めします。アプリバンドルとdmgファイルをビルドするために使用するビルドスクリプトも、オープンソースなので確認できます。
Cal

0

最良の答えはプラットフォームによって異なります。Windowsへの展開では、1つのjarlaunch4jの組み合わせを使用して良い結果が得られました。ビルド環境を適切に設定するのには少し時間がかかりましたが(ほとんどはスクリプト)、今ではかなり簡単です。


0

私の観点からは、優れた配布メカニズムはClickOnceWebStartなどを使用することですテクノロジです。サーバーにバージョンをデプロイするだけで、バージョンがリリースされると自動的にクライアントに渡されます。また、Eclipse RCPプラットフォームには、WebStartの機能を実行するUpdateManagerが含まれていますが、それ以外にも多くの機能があります。

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


0

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


:(はるかにリーズナブルな価格でされているだけでなく、商業用のもの)いくつかの無料のものも含めて、InstallAnywhereの代替のためにこれを参照してください stackoverflow.com/questions/759855/...
Jonik

-2

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

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


これは初心者には決して効きません。
rhody
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.