Eclipse 2.1 には、クラス・ロードの領域など、多くのパフォーマンス強化が組み込まれています。 これを支援するために、プラグイン・マニフェスト・ファイルにマークアップが追加されています。 このファイルではその使用について説明します。
-noPackagePrefixes
コマンド行引き数を Eclipse 実行可能ファイルに渡してください。
プラグイン・マニフェスト・ファイルのパッケージ接頭部の宣言は、
このファイル内で宣言されているライブラリーごとの packages
エレメントで示されます。
packages
エレメントには、ライブラリーに対するパッケージ接頭部をリストする prefixes
属性があります。
通常 jar ファイルには、複数のパッケージに存在するコードが含まれています。
たとえば、org.eclipse.core.runtime
プラグインには、以下のパッケージ内のコードが含まれています。
org.eclipse.core.runtime
.
org.eclipse.core.internal.runtime,
org.eclipse.core.internal.plugins
org.eclipse.core.runtime.model
この場合、plugin.xml
は以下を指定します。
<runtime>
<library name="runtime.jar">
<export name="*"/>
<packages
prefixes="org.eclipse.core"/>
</library>
</runtime>
org.eclipse.core
は、
プラグイン内のすべてのパッケージに共通の接頭部であることに注意してください。
代わりに、ファイル内の 4 つのすべての接頭部を、コンマで区切られたリストとして宣言することもできます。
この場合、複数のエントリーに対して必要な検査数と
false ヒットを含む可能性のある接頭部のトレードオフを検討する必要があります。
コードの構造化の方法によっては、より一般的な接頭部を併用するよりも、5 から 10 のパッケージ接頭部をリストする方が最善の方法になります。
たとえば、ご使用のすべてのコードが複数のプラグインにわたって同じ接頭部を含む場合 (例: com.mycompany
)、
ファイル内に単一接頭部 "com.mycompany" しかリストしていないとその利点をフルに活用することができません。
プラグインに複数のライブラリー宣言が含まれている場合、 その jar から宣言ごとにパッケージ接頭部について説明する必要があります。
プラグイン・マニフェストに packages
エレメントが組み込まれていない場合、
コードは機能しますがクラス・ロード最適化を利用することはできません。
パッケージ接頭部のリストは、プラグインのすべてのライブラリー内のすべてのパッケージに対して完全でなければならないことに注意してください。
このリストが完全でない場合、コードは機能しません。
Eclipse 2.0.2 および Eclipse 2.1 Integration ビルドでは、クラス・ロード強化を使用できるよう、 パッケージ接頭部を含むクラス・ローダー・プロパティー・ファイルを指定できる機能が追加されました。 このファイルの使用については、 ここに示されています。
Eclipse 2.1 はクラス・ローダー・プロパティー・ファイルに対して完全に下位互換であり、 プラグイン・マニフェスト内のパッケージ接頭部宣言と共に使用することができます。 このセクションでは、これら 2 つの機構間の相互作用の動作について説明します。
デフォルト動作: (コマンド行引き数なし) パッケージ接頭部は plugin.xml
ファイルから読み取られ、
クラス・ロード・ストラテジーに適用されます。
classloader.properties
ファイルはアクセスされず、考慮されません。
-classloaderProperties の使用: パッケージ接頭部が plugin.xml
ファイルから読み取られ、
次に classloader.properties
ファイルが読み取られます。
マニフェスト・ファイルに接頭部が定義されているプラグインのクラス・ロード・プロパティー・ファイルにエントリーがある場合、
プロパティー・ファイル内のエントリーがオーバーライドされ、優先されます。
(結果はマージされません) プロパティー・ファイル内のエントリーに値が含まれない場合 (例: org.eclipse.core.runtime=
)、
マニフェスト・ファイル内で宣言されている接頭部は除去され、クラス・ロード・ストラテジーはデフォルトで強化を使用しません。
-noPackagePrefixes の使用: プラグイン・マニフェスト・ファイル内で宣言されているパッケージ接頭部は無視され、 クラス・ローダー・プロパティー・ファイルも考慮されません。 クラス・ロード・ストラテジーはデフォルトで接頭部強化を使用しません。
-classloaderProperties と -noPackagePrefixes の両方を使用: プラグイン・マニフェスト・ファイル内のパッケージ宣言は無視されます。 クラス・ロード・プロパティー・ファイルが読み取られ、クラスがロードされるとその中で定義されている宣言が考慮されます。
java.lang.ClassNotFoundException
が発生した場合、
マニフェストまたはプロパティー・ファイル内のエントリーに問題がある可能性があります。
-noPackagePrefixes
コマンド行引き数で Eclipse を実行してみてください。
このとき -classloaderProperties
引き数は使用しないでください。
これにより、パッケージ接頭部に関してすべてのクラス・ロード強化が使用不可になります。
これを行った後にコードが正常に実行される場合、ファイルの構文は正しいと考えられますが、
コンマ区切りリスト内のパッケージ接頭部のエントリーが欠落している可能性があります。
この問題を検査するには、ファイル内の該当する行をコメント化してください。
プロパティー・ファイル内の問題のプラグイン行をコメント化するには、番号記号 (#) を使用するか、
HTML コメント文字 (<!-- ... -->) を使用して問題の plugin.xml
ファイル内のパッケージ宣言をコメント化してください。
NoClassDefFoundError
問題が発生します。
この問題は -noPackagePrefixes
コマンド行引き数を使用してクラス・ローダー強化をオフにするか、
プラグインおよびそのすべてのフラグメントに該当するパッケージ接頭部エントリーを追加することによって解決することができます。