0

プラグインの「クローン」を作成したい。プラグイン ID を変更して同時にロードするつもりですが、クラスの名前を変更する必要がありますか? Eclipse はプラグインごとに異なるクラス パスを使用できますか?それとも、バンドルからすべてのクラスを単一のヒープにロードするだけですか?

4

2 に答える 2

3

これが機能するかどうかは、質問で指定していない要因に依存するため、Eclipse でクラスのロードがどのように機能するかの背景を説明し、決定できます。

Eclipse は最上位の OSGi で実行されます。各 Eclipse プラグインは OSGi バンドルです。各バンドルには独自のクラスローダーがあります。このクラスローダーは、バンドルに含まれるクラスだけでなく、バ​​ンドルの依存関係からのクラスも認識します。バンドルが依存関係を指定する方法は 2 つあります。どちらの方法も、バンドルの MANIFEST.MF ファイルのエントリを介して機能します。1 つの方法は、Require-Bundle コンストラクトを使用して、他のバンドル全体に依存することです。この方法を使用すると、バンドルは、その依存関係が Export-Package を介してエクスポートするすべてのパッケージを確認します。2 番目の方法は、Import-Package を使用することです。このメソッドを使用して、バンドルは、バンドルが Export-Package を介してエクスポートするパッケージを見つけます。また、プロデューサー側でバンドルとパッケージをバージョン管理し、依存関係側でバージョンを制限することもできます。

したがって、この知識を武器に、これらの質問を自問する必要があります...

  1. Export-Package を介してパッケージをエクスポートするクローンを作成するバンドルです。そうでない場合は、問題ありません。

  2. 元のバンドルを現在指定していて、Require-Bundle を介してクローンを指定するのはどのバンドルですか? 回避しようとしているのは、1 つのバンドルが Require-Bundle で Bundle.Original と Bundle.Clone の両方を指定する状況です。そのような調整が必要な場合は、複製されたパッケージの名前を変更する必要があります。

  3. 最後に確認することは、バンドルがエクスポート パッケージのいずれかで Import-Package を使用しているかどうかです。その場合、パッケージを元のバージョンにバージョン付けし、別の方法で複製する必要があります。これは、Export-Package ディレクティブで発生します。また、オリジナルまたはクローンのバージョンと一致するように、Import-Package ディレクティブでバージョンの制約を慎重に指定する必要があります。パッケージのバージョン管理に失敗し、インポートを制限すると、実行時にどのバージョンが検出されるかに関して、一見ランダムな動作が発生します。繰り返しになりますが、単一のダウンストリーム バンドルが元のパッケージと複製されたパッケージの両方をインポートする必要がある場合は、複製されたパッケージの名前を変更する必要があります。

于 2012-06-26T15:35:59.417 に答える
2

同じクラス名を持つ異なるプラグインを持つことができ、すべてのプラグインが異なるクラスローダーとクラスパスを持つことができますが、JVM では実際に同じ名前を持つ 2 つのクラスをロードすることはできません。

于 2012-06-26T11:55:40.153 に答える