Java デスクトップアプリケーションのパッケージ化と配布
多くの初級プログラマが尋ねる質問の 1 つに、「IDE でアプリケーションを作成しましたが、これを IDE の外部のコマンド行から動作させるにはどうすればよいですか」というものがあります。同様に、「このアプリケーションをほかのユーザーに、IDE 全体を一緒に提供することなく配布するにはどうすればよいですか」と尋ねる場合もあります。
これらの質問への答えは比較的簡単ですが、必ずしも明白ではありません。このドキュメントでは、IDE を使用してアプリケーションを配布や配備のために準備する方法の基本を説明することによって、これらの質問に対処します。さらに、このドキュメントでは、システムを構成するために必要になる可能性のある (または、アプリケーションのユーザーに渡すことが必要になる可能性のある) 情報を提供します。ここでは、ユーザーが次の方法でアプリケーションにアクセスできるように、アプリケーション配備のためのいくつかの異なるアプローチを示します。
- アプリケーションの JAR (Java Archive) ファイルをダブルクリックする。
- コマンド行からアプリケーションを呼び出す。
- スクリプトファイルからアプリケーションを呼び出す。
- Java Web Start を使用する。
目次
このチュートリアルを完了するには、次の表に示すソフトウェアおよびリソースが必要です。
実行可能な JAR ファイルの作成
チュートリアルのこの部分では、IDE で配布可能なアプリケーションを作成したあと、そのアプリケーションを IDE の外部から実行するための方法を示します。このアプリケーションを実行可能な JAR ファイルの形式でパッケージ化します。
JAR ファイルは、複数のファイルやフォルダを含めることができるアーカイブファイルです。JAR ファイルは zip ファイルに似ていますが、JAR ファイルには、Java アプリケーションを配布するために役立つ追加の属性を含めることができます。これらの属性には、JAR ファイルのデジタル署名、追加の圧縮、マルチプラットフォーム互換性などが含まれます。
この課題では、IDE プロジェクトを作成したあと、そのプロジェクトに 2 つのあらかじめ記述された Java ソースファイルを配置します。次に、クラスをコンパイルし、実行可能な JAR ファイルを構築します。その後、JAR ファイルを IDE の外部から実行する方法について学習します。
このチュートリアルで使用されるクラスには、テキストファイル内部のテキストまたは正規表現パターンを検索するために使用できる、GNU grep ユーティリティーの機能が実装されています。このプロジェクトにはコマンド行と GUI の両方のバージョンのアプリケーションが含まれているため、アプリケーションを実行するための異なる方法を確認できます。
既存のソースを使用したプロジェクトの作成
-
DeploymentTutorial.zip ファイルをダウンロードし、その内容をシステム上に抽出します。
この zip アーカイブには、アプリケーションのソースファイルのほかに、このチュートリアルで使用されるその他のファイルもいくつか含まれています。
-
NetBeans IDE で、「ファイル」>「新規プロジェクト」を選択します。
- 「カテゴリを選択」ページで、「Java」カテゴリにある「既存のソースを使用する Java プロジェクト」を選択し、「次へ」をクリックします。
- ウィザードの「名前と場所」ページで、プロジェクト名として「AnotherGrep」と入力し、プロジェクトの場所を指定します。
「主プロジェクトとして設定」チェックボックスを選択されたままにして、「次へ」をクリックします。
プロジェクトフォルダが、プロジェクトにインポートするソースファイルと同じ場所に存在する必要はありません。
- ウィザードの「既存のソース」ページで、プロジェクトに含めるソースを指定します。
「ソースパッケージフォルダ」フィールドの右にある「フォルダを追加」ボタンをクリックします。システム上の先に解凍した DeploymentTutorial フォルダに移動してそのフォルダを展開し、src フォルダを選択して「開く」をクリックします。src フォルダが「ソースパッケージフォルダ」フィールドに追加されます。
- 「完了」をクリックします。
注: たとえば、プロジェクトへのインポートから一部のソースファイルを除外する場合は、「次へ」をクリックして最後の「含める/除外する」ウィンドウを開きます。ここでは、src フォルダ内のすべてのソースファイルを使用するため、「完了」をクリックして「新規プロジェクト」ウィザードでの操作を完了します。
プロジェクトが IDE で開かれ、「プロジェクト」ウィンドウに表示されます。プロジェクトの「ソースパッケージ」ノードを展開することによって、プロジェクトの内容を調べることができます。ここには、Grep と xGrep という名前のクラスが表示されます。Grep.java は、このアプリケーションのコンソールバージョンです。xGrep.java はこのアプリケーションの GUI バージョンであり、Grep.java で定義されたメソッドを使用します。
プロジェクトの構成
次のような、実行する必要のあるいくつかの構成手順があります。
- ソースをコンパイルするために使用される Java プラットフォームを選択します。
- プロジェクトの主クラスを設定します。これを行なうことにより、プロジェクトの構築時に作成する JAR ファイルが実行可能であることが保証されます。
Java プラットフォームの確認
このプロジェクトは、Java 6 プラットフォーム上でコンパイルおよび実行する必要があります。そのため、このプロジェクトのプラットフォームとして Java 6 が使用されることを確認する必要があります。
- プロジェクトノードを右クリックし、「プロパティー」を選択します。
- 「ライブラリ」タブで、「Java プラットフォーム」が「JDK 6」であることを確認します。
- 「ソース」タブの「ソース/バイナリ形式」で「JDK 6」を選択します。
- 「了解」をクリックして「プロパティー」ウィンドウを閉じます。
主クラスの設定
ユーザーが (JAR ファイルをダブルクリックするか、またはコマンド行で「java -jar AnotherGrep.jar」と入力することによって) JAR ファイルを容易に実行するには、その JAR のマニフェストファイル内で主クラスを指定する必要があります。(マニフェストは、アプリケーションを実行するときに java 起動プログラムに役立つ JAR ファイルに関する情報を含む、JAR ファイルの標準の部分です。)主クラスは、java 起動プログラムがアプリケーションの実行を開始するエントリポイントとして機能します。
プロジェクトを構築すると、IDE によって JAR ファイルが構築され、マニフェストが含められます。プロジェクトの主クラスを設定する場合は、その主クラスがマニフェストで指定されていることを確認してください。
プロジェクトの主クラスを設定するには、次の手順に従います。
- プロジェクトノードを右クリックし、「プロパティー」を選択します。
- 「実行」パネルを選択し、「主クラス」フィールドに「anothergrep.xGrep」と入力します。
- 「了解」をクリックして、「プロジェクトプロパティー」ダイアログを閉じます。
このチュートリアル内のあとでプロジェクトを構築すると、マニフェストが生成され、次のエントリが含まれます。
Main-Class: anothergrep.xGRep
プロジェクトの構築および JAR ファイルの作成
これでソースの準備ができ、プロジェクトが構成されたので、次にプロジェクトを構築します。
プロジェクトを構築する
- 「実行」>「主プロジェクトを構築」を選択します。
または、「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「構築」を選択します。
プロジェクトを構築すると、次が行われます。
- build フォルダおよび dist フォルダは、プロジェクトフォルダ (以後 PROJECT_HOME フォルダと呼ぶ) に追加されます。
- すべてのソースは、PROJECT_HOME/build フォルダにある .class ファイルにコンパイルされます。
- プロジェクトが含まれた JAR ファイルが PROJECT_HOME/dist フォルダ内に作成されます。
- プロジェクトのライブラリを指定した場合 (JDK に加えて)、dist フォルダに lib フォルダが作成されます。ライブラリが dist/lib にコピーされます。
- JAR にあるマニフェストファイルが更新され、プロジェクトのクラスパスにある主クラスとライブラリを指定するエントリが含まれます。
注: IDE の「ファイル」ウィンドウで、マニフェストの内容を表示できます。プロジェクトを構築したら、「ファイル」ウィンドウに切り替え、dist/AnotherGrep.jar に移動します。JAR ファイルのノードを展開し、META-INF フォルダを展開します。次に、MANIFEST.MF をダブルクリックしてソースエディタのマニフェストを表示します。
Main-Class: anothergrep.xGrep
マニフェストファイルの詳細を調べるには、Java チュートリアルの
この章を読んでください。
JAR ファイルの実行と配布
IDE の内部でのアプリケーションの実行
IDE でアプリケーションを開発する場合は通常、配布する前に、それらのアプリケーションをテストして調整する必要があります。IDE からアプリケーションを実行することによって、作業中のアプリケーションを容易にテストできます。
IDE で AnotherGrep プロジェクトを実行するには、「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「実行」を選択します。
「xGrep」ウィンドウが開きます。「Browse」ボタンをクリックすると、テキストのパターンを検索するファイルを選択できます。「Search Pattern」フィールドに、一致を検索するテキストまたは正規表現パターンを入力し、「Search」をクリックします。それぞれの一致の結果が「xGrep」ウィンドウの「Output」領域に表示されます。
このアプリケーションで使用できる正規表現に関する情報は、ここや、その他の多くの場所で入手できます。
IDE の外部でのアプリケーションの実行
アプリケーションの開発を完了したら、配布する前に、そのアプリケーションが IDE の外部でも動作することの確認が必要になる場合があります。
次の手順に従うことによって、IDE の外部でアプリケーションを実行できます。
- システムのファイルマネージャー (たとえば、Windows XP システム上の「マイコンピュータ」ウィンドウ) で、PROJECT_HOME/dist に移動して AnotherGrep.jar ファイルをダブルクリックします。
「xGrep」ウィンドウが開いたら、アプリケーションが正常に起動されたことがわかります。
「xGrep」ウィンドウが開かない場合は、おそらく、システムに JAR ファイルと Java Runtime Environment の間のファイルの関連付けが存在しません。下の「JAR ファイルの関連付けのトラブルシューティング」を参照してください。
アプリケーションのほかのユーザーへの配布
これで IDE の外部でアプリケーションが動作することが確認されたため、そのアプリケーションを配布する準備ができました。
- このアプリケーションを使用するユーザーに、アプリケーションの JAR ファイルを送信します。このアプリケーションのユーザーは、JAR ファイルをダブルクリックすることによって実行できるはずです。これが正しく機能しない場合は、ユーザーに下の「JAR ファイルの関連付けのトラブルシューティング」の節にある情報を示してください。
注: アプリケーションが JDK に含まれているライブラリ以外の追加ライブラリに依存している場合は、配布にそれらのライブラリも含める必要があります (この例には該当しません)。これらのライブラリの相対パスは、IDE でアプリケーションを開発しているときに JAR のマニフェストファイルの classpath エントリに追加されます。起動時に、これらの追加ライブラリが指定されたクラスパス (つまり、相対パス) に見つからない場合、アプリケーションは起動されません。
アプリケーションの JAR ファイルとライブラリを含む zip アーカイブを作成し、この zip ファイルをユーザーに提供します。この zip ファイルを展開して、この JAR ファイルとライブラリの JAR ファイルが同じフォルダに存在することを確認するようユーザーに指示します。アプリケーションの JAR ファイルを実行します。
Java アプリケーションの起動
この課題の目標は、コマンド行からアプリケーションを起動するためのいくつかの方法を示すことです。
この課題では、Java アプリケーションを起動するための次の 2 つの方法を示します。
- コマンド行から java コマンドを実行します。
- スクリプトを使用して、JAR ファイル内のクラスを呼び出します。
コマンド行からのアプリケーションの起動
java コマンドを使用して、コマンド行からアプリケーションを起動できます。実行可能な JAR ファイルを実行する場合は、このコマンドの -jar オプションを使用します。
たとえば、AnotherGrep アプリケーションを実行するには、次の手順に従います。
- ターミナルウィンドウを開きます。Microsoft Windows システムでこれを行うには、「スタート」>「ファイル名を指定して実行」を選択し、「名前」フィールドに「cmd」と入力して「OK」をクリックします。
- PROJECT_HOME/dist フォルダにディレクトリを変更します (cd コマンドを使用します)。
- 次の行を入力して、アプリケーションの主クラスを実行します。
java -jar AnotherGrep.jar
これらの手順に従ってもアプリケーションが実行されない場合は、おそらく、次のいずれかを実行する必要があります。
スクリプトからのアプリケーションの起動
配布するアプリケーションがコンソールアプリケーションである場合は、そのアプリケーションをスクリプトから起動するのが便利なことに気付くかもしれません (特に、そのアプリケーションが、実行のために長く、複雑な引数を必要とする場合)。この節では、Grep プログラムのコンソールバージョンを使用します。その場合、JAR ファイルに引数 (検索パターンとファイルリスト) を渡す必要がありますが、それはこのスクリプトで呼び出されます。コマンド行での入力を減らすために、テストアプリケーションを実行するのに適した単純なスクリプトを使用します。
まず、アプリケーション内の主クラスをコンソールバージョンのクラスになるように変更し、JAR ファイルを再構築する必要があります。
- IDE の「プロジェクト」ウィンドウで、プロジェクトのノード (AnotherGrep) を右クリックし、「プロパティー」を選択します。
- 「実行」ノードを選択し、「主クラス」プロパティーを (「anothergrep.xGrep」から) 「anothergrep.Grep」に変更します。「了解」をクリックして、「プロジェクトプロパティー」ウィンドウを閉じます。
- プロジェクトのノードをもう一度右クリックし、「プロジェクトの生成物を削除して構築」を選択します。
これらの手順を完了すると、JAR ファイルが再構築され、JAR ファイルのマニフェストの Main-Class 属性が anothergrep.Grep を指すように変更されます。
BASH スクリプト -- UNIX および Linux マシン用
DeploymentTutorial.zip ファイルの内容を抽出したシステム上のフォルダ内に、grep.sh bash スクリプトがあります。それを見てください。
#!/bin/bash
java -jar dist/AnotherGrep.jar $@
1 行目は、どのシェルを使用してこれを解釈すべきかを明示しています。2 行目は、IDE によって PROJECT_HOME/dist フォルダ内に作成された JAR ファイルを実行します。$@ は単純に、指定されたすべての引数を、それぞれ引用符で囲んでコピーします。
このスクリプトでは、Java バイナリが PATH 環境変数に含まれていることを想定しています。このスクリプトが正しく動作しない場合は、「PATH 環境変数の設定」を参照してください。
bash スクリプトについての詳細は、ここを参照してください。
Windows マシン用の .bat スクリプト
Microsoft Windows システムでは、バッチファイルに一度に 9 つの引数しか渡すことができません。9 つを超える引数がある場合は、JAR ファイルを複数回実行する必要があります。
これを処理するスクリプトは次のようになります。
@echo off
set jarpath="dist/AnotherGrep.jar"
set pattern="%1"
shift
:loop
if "%1" == "" goto :allprocessed
set files=%1 %2 %3 %4 %5 %6 %7 %8 %9
java -jar %jarpath% %pattern% %files%
for %%i in (0 1 2 3 4 5 6 7 8) do shift
goto :loop
:allprocessed
このスクリプトは、DeploymentTutorial.zip ファイルの内容を抽出したシステム上のフォルダ内に grep.bat として含まれているため、試してみることができます。
9 つの引数は、このバッチファイルの内部で %<ARG_NUMBER> で表されています。ここで、<ARG_NUMBER> は <0-9> の範囲内にある必要があります。%0 は、スクリプト名のために予約されています。
プログラムに一度に (1 回のループで) 9 つの引数しか渡されないことがわかります。for 文は、次のループに備えて単純に引数を 9 シフトします。if 文によって空のファイル引数が検出されると (処理するファイルがそれ以上ない場合)、ループは終了します。
バッチスクリプト処理についての詳細は、このページを参照してください。
Java Web Start 用のアプリケーションのパッケージ化
Java Web Start は、シングルクリックで Web ブラウザから Java アプリケーションを実行するために使用されるテクノロジです。Java Web Start を使用した配備のためのアプリケーションのパッケージ化についての詳細は、「NetBeans IDE での Java Web Start の有効化」を参照してください。ここでは、Java Web Start を使用してアプリケーションを配備可能にするために従う必要のある簡単な手順のみを示します。
- 「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「プロパティー」を選択します。
- 「プロジェクトプロパティー」ウィンドウの「Web Start」タブで、「Web Start を有効化」チェックボックスを選択します。
- 「コードベース」ドロップダウンリストから「ローカル実行」を選択します (ここではローカル実行のみをテストするため)。
その他の設定はすべてデフォルト値のままにして、「了解」をクリックします。
- プロジェクトのノードを右クリックし、「生成物を削除して構築」を選択します。
この IDE コマンドによって、以前にコンパイルされたファイルや構築の出力がすべて削除され、アプリケーションが再コンパイルされて、プロジェクトが新しい設定で構築されます。
- IDE の外部で、PROJECT_HOME/dist フォルダを開き、launch.html ファイルをブラウザで開きます。
「Launch」ボタンを含むテスト用 HTML ページが開きます。
- 「Launch」ボタンをクリックしてアプリケーションを開きます。
Java が読み込まれ、アプリケーションが起動されることが確認できます。
注: 一部のブラウザでは、最初に Java のダウンロードページにリダイレクトされます。
トラブルシューティングのヒント
JAR ファイルの関連付けの指定
ほとんどのシステムでは、実行可能な JAR ファイルを単純にダブルクリックすることによって、その JAR ファイルを実行できます。JAR ファイルをダブルクリックしても何も起こらない場合は、次の 2 つの理由のどちらかが原因である可能性があります。
注: JAR ファイルの関連付けが、zip ファイルを処理するソフトウェアなどの、インストールしたソフトウェアによって切り替えられる場合があります。
JAR ファイルタイプを java 起動プログラムに関連付ける方法は、使用しているオペレーティングシステムによって異なります。Microsoft Windows (7 より前のバージョン) で JAR ファイルの関連付けを追加するための手順を次に示します。
- いずれかのバージョンの JRE がシステムにインストールされていることを確認します。バージョン 1.4.2 以降を使用するようにしてください。Java がインストールされていない場合は、Java アプリケーションを起動できません。(JDK をインストールすると、JRE も取得されます。ただし、プログラマ以外にプログラムを配布する場合は、そのユーザーが必ずしも JRE や JDK を持っているとは限りません。)
Windows XP では、「スタート」>「コントロールパネル」>「プログラムの追加と削除」を選択することによって、Java のインストールされているバージョンを確認できます (たとえば、「Java(TM) 6 Update 23」が表示されます)。
システム上に Java が存在しない場合は、Java SE ダウンロードサイトから JRE を取得できます。
システムに Java がインストールされているが、ファイルの関連付けが機能していない場合は、次の手順に進みます。
- 「スタート」>「コントロールパネル」を選択します。
- 「フォルダオプション」をダブルクリックします。
- 「ファイルの種類」タブを選択します。
- 「登録されているファイルの種類」リストで、「JAR ファイル」を選択します。
- ダイアログボックスの「詳細」セクションで、「変更」をクリックします。
- 「ファイルを開くプログラムの選択」ダイアログボックスで、「Java Platform SE バイナリ」を選択します。
- 「OK」をクリックして「ファイルを開くプログラムの選択」ダイアログボックスを終了します。
- 「閉じる」をクリックして「フォルダオプション」ダイアログボックスを終了します。
注: システム上で JAR ファイルが Java Platform SE バイナリに関連付けられているが、依然として JAR ファイルをダブルクリックしても実行されない場合は、ファイルの関連付けで -jar オプションの指定が必要である可能性があります。
Microsoft Windows XP で、ファイルの関連付けで -jar オプションを指定するには、次を行います。
- 「スタート」>「コントロールパネル」を選択します。
- 「フォルダオプション」をダブルクリックします。
- 「ファイルの種類」タブを選択します。
- 「登録されているファイルの種類」リストで、「JAR ファイル」を選択します。
- ダイアログボックスの「詳細」セクションで、「詳細設定」をクリックします。
- 「ファイルの種類の編集」ダイアログボックスで、「編集」をクリックします。
- 「アクションを実行するアプリケーション」テキストフィールドで、JRE のパスの最後に次を追加します。
-jar "%1" %*
その後、フィールドには次のようなテキストが含まれているはずです。
"C:\Program Files\Java\jre1.6.0_23\bin\javaw.exe" -jar "%1" %*
- 「OK」をクリックして「アクションの編集」ダイアログボックスを終了します。
- 「OK」をクリックして「ファイルの種類の編集」ダイアログボックスを終了します。
- 「閉じる」をクリックして「フォルダオプション」ダイアログボックスを終了します。
UNIX および Linux システムの場合、ファイルの関連付けを変更するための手順は、使用しているデスクトップ環境 (GNOME や KDE など) によって異なります。デスクトップ環境の設定を確認するか、またはデスクトップ環境のドキュメントを参照してください。
PATH 環境変数の設定
システム上の JDK または JRE の場所を指し示さないとシステム上で Java クラスまたは JAR ファイルを実行できない場合は、システムの
PATH 変数の値の変更が必要である可能性があります。
Microsoft Windows システム上で実行している場合、PATH 変数を設定するための手順は、使用している Windows のバージョンによって異なります。
次の手順は、Windows XP システム上で PATH 変数を設定する場合を示しています。
- 「スタート」>「コントロールパネル」を選択し、「システム」をダブルクリックします。
- 「システムのプロパティ」ダイアログボックスで、「詳細設定」タブをクリックします。
- 「環境変数」タブをクリックします。
- ユーザー変数の一覧で、「PATH」を選択し、「編集」をクリックします。
- パスのリストの最後に JRE の場所を追加します。このリスト内の場所はセミコロン (;) で区切られます。
たとえば、JRE が次の場所にある場合は、
C:\Program Files\Java\jdk1.6.0_23
PATH 変数の最後に次を追加します。
C:\Program Files\Java\jdk1.6.0_23\bin
- 「OK」をクリックして「環境変数」ダイアログボックスを終了し、「OK」をクリックして「システムのプロパティ」ダイアログボックスを終了します。
UNIX または Linux システム上で実行している場合、PATH 変数を変更するための手順は、使用しているシェルプログラムによって異なります。詳細は、使用しているシェルのドキュメントを参照してください。
次の手順