最終変更日時 2004 年 6 月 18 日 (金) 15:20
Eclipse ベースの製品は、エンド・ユーザーのコンピューターに正しくインストールする必要があります。特殊目的のパッケージ化ツール、InstallShield および RPM が、インストール、更新、アンインストールを自動化する、実行可能インストーラーをビルドするためによく使用されます。この注では、Eclipse ベースの製品のインストーラーと、 Eclipse ベースの製品とは別にインストールできる拡張用のインストーラーを作成する方法について説明します。
ここでは、製品開発チームが、未加工の要素を提供することに責任を持っているものとします。未加工の要素については、エンド・ユーザーのコンピューターに実行可能インストーラーとしてこれらの要素をパッケージする方法を見つける必要があります。実行可能インストーラーの作成は、エンド・ユーザーと相互作用し、ファイルをコンピューターに置くために必要な、インストール時アクションをスクリプトすることです。この注では、これらのインストーラーが行う必要のある操作と、それらが作用する方法を詳細に説明します。
この注は、Eclipse ベースの製品のインストーラーを作成する責任を持つユーザーのためのレシピです。すべてのインストーラー作成者が我々のレシピに従うようにお勧めするのには、次の 2 つの理由があります。
製品インストーラーは自己完結型にすべきです - これは CD で配布され、適切なオペレーティング・システムを持つ任意のマシンにインストールできるものです。
Eclipse は、Java コードを実行するために Java2 Java Runtime Environment (JRE) を必要とします。 JRE は、ライセンス交付を受けたソフトウェアで、Java ベンダーから入手します。 JRE ベンダーから JRE を再配布するライセンスを取得していれば、企業はその製品に JRE を組み込むことができ、その製品と同時にエンド・ユーザーのコンピューターにインストールできます。上記以外の方法では、JRE をエンド・ユーザーのコンピューターにあらかじめインストールし、製品のインストール時に関連付ける必要があります。いずれにしても、Eclipse ベースの製品には適切な JRE が必要で、その製品のインストーラーは、 JRE をインストールするか、既存の JRE を探してリンクする必要があります。
JRE を製品と一緒にインストールすると仮定します。
JRE を含むディレクトリーはインストーラー作成スクリプトの 1 つの入力です。このディレクトリーを <JRE> と表します。このディレクトリーは標準ディレクトリー構造を持っていて、<JRE> ディレクトリーの下、
jre/bin/java.exe
に Java 実行可能ファイル、jre/lib/rt.jar
にクラス・ライブラリーを必要とします。このディレクトリーのスケルトン構造は次のようになります。
<JRE>/
jre/
bin/
java.exe
lib/
rt.jar
これらのディレクトリーには追加のファイル (およびサブディレクトリー) があります。ここでは一般的な構造を示すサンプルのみを示します。イタリック体の名前は製品固有のものです。
インストーラー作成スクリプトの 2 番目の入力は、ディレクトリー <product head
> で、製品固有の実行可能ランチャーおよび Eclipse に関係のないファイルを含んでいます。参照として、このディレクトリーのスケルトン構造は次のようになります
(イタリック体は、製品によって変化するファイル名を示します)。
<product head>/
インストーラー作成スクリプトの 3 番目の入力は、ディレクトリー <
acmeproduct.exe
product body
> で、製品用に開発されたフィーチャーおよびプラグインを含みます。このディレクトリーのスケルトン構造は次のようになります。
<product body>/
eclipse/
features/
com.example.acme.acmefeature_1.0.0/
feature.xml
com.example.acme.otherfeature_1.0.0/
feature.xml
plugins/
com.example.acme.acmefeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
plugin_customization.ini
splash.bmp
com.example.acme.otherfeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
com.example.acme.myplugin_1.0.0/
plugin.xml
myplugin.jar
com.example.acme.otherplugin_1.0.0/
plugin.xml
otherplugin.jar
インストーラー作成スクリプトの 4 番目の入力は、ディレクトリー <platform
> で、
Eclipse プラットフォームそれ自体と組み込まれている任意のサード・パーティー・ツール用のフィーチャーおよびプラグインを含みます。このディレクトリーには、標準 Eclipse 実行可能ランチャー、eclipse.exe
(UNIX 操作環境では eclipse
という名前です)、そのコンパニオン startup.jar
、およびインストールのルートで必要な他の Eclipse プラットフォーム・ファイルも含みます。このディレクトリーのスケルトン構造は次のようになります。
<platform>
<
eclipse/
eclipse.exe
startup.jar
features/
org.eclipse.platform_2.0.0/
org.eclipse.platform.win32_2.0.0/
org.eclipse.jdt_2.0.0/
org.eclipse.pde_2.0.0/
plugins/
org.eclipse.platform_2.0.0/
org.eclipse.core.runtime_2.0.0/
org.eclipse.core.boot_2.0.0/
org.eclipse.core.resources_2.0.0/
org.eclipse.ui_2.0.0/
org.eclipse.jdt_2.0.0/
org.eclipse.jdt.core_2.0.0/
org.eclipse.jdt.ui_2.0.0/
org.eclipse.pde_2.0.0/
org.eclipse.pde.core_2.0.0/
org.eclipse.pde.ui_2.0.0/
(more org.eclipse.* plug-in directories)
JRE
>、<product head
>、
<product body
>、および <platform
> 入力ディレクトリーの内容が、エンド・ユーザーのコンピューターにどのファイルがインストールされるかを決定します。
インストーラー作成スクリプトの最後の入力は、製品の 1 次フィーチャーの ID およびバージョンのストリング、例えば com.example.acme.acmefeature
および 1.0.0
と、製品実行可能ファイルの名前、例えば acmeproduct
.exe
です。それ自体の製品実行可能ファイルを必要としない製品の場合、これは標準 Eclipse 実行可能ランチャーのパス
eclipse/eclipse.exe
になります。これらのストリングは、インストーラーには特別に重要で、ファイルとディレクトリーの名前中に、またインストール時に作成されたマーカー・ファイルの内容中に見られます。
インストール時、インストーラーは、以下のような標準的な動作をする必要があります (ステップのリストの最後にさらに詳細があります)。
ステップ 5 で指定したロケーションが <install
> の場合は、インストーラーは、<JRE
>、<platform>、
<product
>、および
<product plug-ins>
ディレクトリー内のすべてのファイルを、
<install
> にコピーします。
入力ファイル | インストール済みファイル |
<JRE>/* |
<install>/eclipse/* |
<product head>/* |
<install>/* |
<product body>/* |
<install>/* |
<platform>/* |
<install>/* |
ステップ 8 で作成したマーカー・ファイル <install>/eclipse/.eclipseproduct
を使用して、Eclipse ベースの製品がインストールされたディレクトリーにマークを付けます (主に拡張インストーラーの検出用)。このマーカー・ファイルは
java.io.Properties
フォーマット・ファイル (「¥」エスケープを持つ ISO 8859-1 文字エンコード) で、ユーザーが製品を識別するための以下の情報を含み、Eclipse ベースの製品と他を区別します。
name=Acme Visual Tools Pro
id=com.example.acme.acmefeature
version=1.0.0
「ID 」と「バージョン」プロパティーの値は、インストーラー作成スクリプトの入力です。製品の名前はおそらく既知であり、事前に決まっています。 (製品は通常、このマーカー・ファイルをアクセスすることはなく、製品および拡張のインストーラーのみがこれを読み書きします。)
ステップ 6 では、既存の <install>/eclipse/.eclipseproduct
または
<install>/eclipse/.eclipseextension
ファイルの検査が必要になります。製品は、他の製品または拡張とまったく同じ場所にはインストールできません。
すべてのファイルをインストールした後は、インストール・ディレクトリーの最上位構造には、次のファイルおよびサブディレクトリーその他が含まれます。
<install>/
製品インストーラーが、登録された所有者の名前やライセンス・キーのようなライセンス情報をユーザーから請求する場合は、この情報を製品の「製品情報」ダイアログに作成する必要があります (ステップ 10)。
acmeproduct.exe
eclipse/
.eclipseproduct
eclipse.exe
startup.jar
features/
plugins/
jre/
この処理は、1 次フィーチャーのプラグインの「about.mapping
」ファイルに、ユーザーの応答を記録することにより行われます。例えば、<install>/plugins/com.example.acme.acmefeature_1.0.0/about.mapping
のようになります。
about.mapping
ファイルは、<product head
> 入力にすでに存在しているか、またはインストーラーがインストール時に作成する必要があります。そのキーは番号です。「n」キーの値は、「aboutText
」プロパティー内のサブストリング「{n}
」で置換されます。例えば、ライセンス・キーがフィールド番号 0 であった場合は、「 0=T42-24T-ME4U-U4ME
」のような行を含む「about.mapping
」ファイルを作成する必要があります。
N.B.
「about.mapping
」ファイルは、
java.io.Properties
フォーマット・ファイル (「¥」エスケープを持つ ISO 8859-1 文字エンコード) です。インストール時の固有文字エンコードが ISO 8859-1 と異なる場合は、インストーラーは、固有文字エンコードを Unicode に変換し、必要に応じて「¥」エスケープを追加する責任があります。ストリングが特殊文字 (「¥」など) またはラテン文字以外の文字を含む場合は、エスケープが必要です。例えば、最初の 3 文字にギリシャ語アルファベットを含んでいるフィールド番号 1 の場合は、「1=¥u03B1¥u03B2¥u03B3
」となります。
ステップ 12 では、製品インストーラーは、特定の -initialize オプション [exact details TBD] を付けた、その製品の実行可能ファイル <install>/acmeproduct.exe
を起動します。これにより、Eclipse プラットフォームは、時間を要する最初の処理をすべて実行し、結果をキャッシュに入れるので、ユーザーがその製品を開始すると、すぐにビジネスで使用できる状態になります。
アンインストール時、アンインストーラーは、次のような標準の方法で動作させる必要があります。
install
> ディレクトリーから除去する。また、このインストーラー (例えば Eclipse 更新マネージャー) 以外のパーティーが配置したものを含む、
<install
>/eclipse/features
および
<install
>/eclipse/plugins
内の すべてのファイルを除去する製品がアンインストールされるとき、インストール時に置かれたファイルを削除し、
Eclipse 更新マネージャーが作成した更新済みフィーチャーおよびプラグインも一緒に削除します。
重要: アンインストール時、<install>
ディレクトリー、特に <install>/eclipse/workspace/
、
<install>/eclipse/links/
、および <install>/eclipse/configuration/
にある、重要なデータが含まれている他のディレクトリーおよびファイルは、製品をアンインストールするとき、保管しておく必要があります。ユーザーは、重要なデータを失わずに同じロケーションで、アンインストールおよび再インストールできなければなりません。
製品がすでにユーザーのコンピューターにインストールされているとき、インストーラーは、インストール済み製品に対してサービス更新またはバージョンアップをできるようにしておく必要があります。
インストール時、インストーラーは、次のような標準の方法で動作させる必要があります。
ステップ 2 で、インストール済み製品は、「.eclipseproduct
」という名前のファイルを含む、「eclipse
」ディレクトリーの存在によって認識できます。「eclipse
」ディレクトリーの親は、製品のインストール・ディレクトリー、つまり、<install>/eclipse/.eclipseproduct
です。このマーカー・ファイルに含まれる情報は、正しい製品が更新されていることを確認するために、ユーザーに示す必要があります (ユーザーのコンピューターには、いくつかの Eclipse ベースの製品がある可能性があります)。
インストーラーは、ステップ 3 で互換性検査を行う必要があります。そこでは、<install>/eclipse/features
ディレクトリーのサブディレクトリーに対して、単純なパターン・マッチングが行われます。例えば、「com.example.acme.otherfeature_1.0.1
」に一致するフォルダーがある場合、これは特定のサービス更新がインストール済み製品に適用されたことを示します。
ステップ 7 では、インストーラーは、最初からインストールされていたファイルを削除あるいは置換し、より多くのファイルを追加する場合があります。
重要: <install>/eclipse/workspace/
、
<install>/eclipse/configuration
を含むファイルおよびディレクトリーの中には、インストールと共に配置され、製品をアップグレードするとき保管する必要がある重要なデータ・ファイルを含むものがある可能性があります。
アップグレード時は、<install>/eclipse/plugins/
下のファイルのほとんどは、同じ状態である可能性があります (<install>/eclipse/features/
と同様に)。そこでは <install>/eclipse/plugins/
を最適化する絶好の機会があります。プラグイン (あるいはフラグメント) のバージョン番号を持つサブディレクトリーは、その下にあるファイルが変更された場合にのみ変更されるからです。言い換えれば、<install>/eclipse/plugins/org.eclipse.ui_2.0.0
/ 内のファイルには、アップグレードの後、このサブディレクトリーも存在している場合は、触れる必要がありません。プラグインのファイルが変更されていた場合は、プラグインのバージョン番号は改訂され、アップグレード済みプラグイン用ファイルは、並列ディレクトリー
<install>/eclipse/plugins/org.eclipse.ui_2.0.1
/ にインストールされます。
JRE は、<install>/eclipse/jre/bin/javaw.exe
にあることが想定されています。他の場所に置かれている場合は、コマンド行で -vm
オプションを使用して、絶対パスを指定する必要があります。つまり、 -vm C:¥j2jre1.3.0¥jre¥bin¥javaw.exe
と指定します。どの場合も、インストーラーは、このオプションを作成するデスクトップのショートカットのコマンド行に追加する必要があります。
拡張とは、別個にインストール可能なフィーチャーとそのプラグインのセットで、同じコンピューターにインストールされた 1 つ以上の Eclipse ベースの製品に関連付け、そこから使用することができます。製品と対比した場合、拡張は自己完結型ではありません。拡張には、製品の実行可能ファイル、Eclipse プラットフォーム、JRE は組み込まれていません。
一般性を失うことなく、拡張は単一フィーチャーからなると想定します。インストーラー作成スクリプトの最初の入力は、そのフィーチャーおよびプラグインを含むディレクトリー、
<extension
> です。拡張には、Eclipse に関連するファイルはないことを想定します。そのようなファイルがある場合、それらは <extension>/eclipse/
には入れられず、<extension>/
に入れられます。このディレクトリーのスケルトン構造は次のようになります。
<extension>/
eclipse/
features/
com.example.wiley.anvilfeature_1.0.0/
feature.xml
plugins/
com.example.wiley.anvilfeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
com.example.wiley.mainplugin_1.0.0/
com.example.wiley.otherplugin_1.0.0/
<extension
> 入力ディレクトリーの内容により、ファイルがエンド・ユーザーのコンピューターにインストールされるファイルが決定されます。
インストーラー作成スクリプトの最後の入力は、拡張のフィーチャー用の ID とバージョンのストリングです。これは、例えば「com.example.wiley.anvil
」および「1.0.0
」です。これらのストリングは、インストーラーには特別に重要で、ファイルとディレクトリーの名前中に、またインストール時に作成されたマーカー・ファイルの内容中に見られます。
拡張インストーラーは、多くの点で製品インストーラーに類似しています。相違点を以下に示します。
インストール時、以下のように、インストーラーは標準の方法で動作します。
ステップ 5 で指定したロケーションが <install
> の場合、インストーラーは、ステップ 11 で、<extension>
ディレクトリー内のすべてのファイルを、
<install
> にコピーします。
入力ファイル | インストール済みファイル |
<extension>/* |
<install>/* |
ステップ 7 では、どの Eclipse 製品も候補になる可能性があります。
Eclipse ベースの製品は、<product install>/eclipse/.eclipseproduct
ファイルの存在で認識されます。ユーザーは、インストール済み製品について制限付きディスク検索を要求可能であるか
(「インストール済み製品の検索」ボタン)、または製品を含むディレクトリーにナビゲートされます
(「参照」ボタン)。
インストーラーは、ステップ 8 で互換性検査を行う必要があります。そこでは、<product install>/eclipse/features
ディレクトリーのサブディレクトリーに対して、単純なパターン・マッチングが行われます。例えば、「org.eclipse.jdt_2.*
」に一致するフォルダーがある場合、これは JDT がインストール済み製品に組み込まれていることを意味します。
ステップ 10 で作成したマーカー・ファイル <install>/eclipse/.eclipseextension
は、基本的には拡張インストーラーを探すために、
Eclipse ベースの拡張がインストールされたディレクトリーにマークを付けるために使用されます
(製品の .eclipseproduct
マーカー・ファイルに類似のもの)。このマーカー・ファイルは
java.io.Properties
フォーマット・ファイル (「¥」エスケープを持つ ISO 8859-1 文字エンコード) で、ユーザーが拡張を識別するための以下の情報を含み、Eclipse ベースの拡張と他を区別します。
name=Wiley Anvil Enterprise Edition
id=com.example.wiley.anvilfeature
version=1.0.0
「ID」と「バージョン」プロパティーの値は、インストーラー作成スクリプトの入力です。拡張の名前はおそらく既知であり、事前に決まっています。 (製品は通常、このマーカー・ファイルをアクセスすることはなく、製品および拡張のインストーラーのみがこれを読み書きします。)
すべてのファイルをインストールした後は、インストール・ディレクトリーの最上位構造には、次のファイルおよびサブディレクトリーが含まれます。
<install>/
eclipse/
.eclipseextension
features/
plugins/
製品インストーラーとの顕著な違いは、拡張インストーラーはユーザーのコンピューターにすでにインストール済みの他の Eclipse ベースの製品に、ファイルのリンクも作成することだけです。 (これにより、ユーザーは、新規拡張を Eclipse 更新マネージャーを使用して、手動で各製品内から関連付ける手間を省くことができます。)
ステップ 14 で作成されたファイルのリンクは、
<product install>/eclipse/links/com.example.wiley.anvilfeature.link
です。つまり、ファイルは、バージョン番号接尾部より小さい、拡張のフィーチャー・ディレクトリーと同じ名前を持っています。ファイルのリンクは、
java.io.Properties フォーマット・ファイル
(「¥」エスケープを持つ ISO 8859-1 文字エンコード) です。キーは「path」で、その値はインストール済み拡張、<install>
の絶対パスです。つまり、エントリーは path=C:¥¥Program Files¥¥Wiley¥¥Anvil
のようになります。
インストーラーは、固有文字エンコードから Unicode へ変換し、必要に応じて「¥」エスケープを追加する責任があります。
<install>
は一般に (「¥」のような) 特殊文字を含んでいて、名前にラテン以外の文字を持ったディレクトリーを持っている可能性があるので、エスケープは通常は必要です。製品は始動時にファイルのリンクを読み取ります。インストーラーは、作成するファイルのリンクの記録を保持しているので、拡張が更新されるか、アンインストールされるとき、それらを見つけることができます。
アンインストール時、アンインストーラーは、次のような標準の方法で動作させる必要があります。
install
> ディレクトリーから除去する。また、このインストーラー (例えば Eclipse 更新マネージャー) 以外のパーティーが配置したものを含む、
<install
>/eclipse/features
および
<install
>/eclipse/plugins
内の すべてのファイルを除去する拡張がアンインストールされるとき、すべてのプラグインおよびフィーチャーのファイルも削除する必要があります。これらのサブディレクトリーには、重要なデータ・ファイルは保持されていません。これにより、ユーザーは、Eclipse 更新マネージャーにより適用された任意の更新を含め、拡張を完全にアンインストールすることができます。
拡張がすでにユーザーのコンピューターにインストールされているとき、インストーラーは、インストール済み拡張に対してサービス更新またはバージョンアップをできるようにしておく必要があります。
インストール時、インストーラーは、次のような標準の方法で動作させる必要があります。
ステップ 2 で、インストール済み拡張は、「.eclipseextension
」という名前のファイルを含む、「eclipse
」ディレクトリーの存在によって認識できます。「eclipse
」ディレクトリーの親は、拡張のインストール・ディレクトリー、つまり、<install>/eclipse/.eclipseextension
です。このマーカー・ファイルに含まれる情報は、正しい拡張が更新されていることを確認するために、ユーザーに示す必要があります (ユーザーのコンピューターには、いくつかの Eclipse ベースの拡張がある可能性があります)。
ステップ 7 では、インストーラーは最初にインストールされた任意のファイルを削除または上書きしてはいけません。むしろ、フィーチャーおよびプラグインの新規バージョン用のファイルのみを追加する必要があり、マーカー・ファイル <install>/eclipse/.eclipseextension
は再書き込み可能です。古いバージョンを残しておくと、ユーザーは、更新をバックアウトするオプションが与えられます。製品インストールをアップグレードすると、<install>/eclipse/plugins/com.example.wiley.otherplugin_1.0.0
/ 内のファイルには、アップグレードの後、このサブディレクトリーも存在している場合は、触れる必要がありません。プラグインのファイルが変更されていた場合は、プラグインのバージョン番号は改訂され、アップグレード済みプラグイン用ファイルは、並列ディレクトリー <install>/eclipse/plugins/com.example.wiley.otherplugin_1.0.1
/ にインストールされます。