1

現在、必要なプラグインのクラスを参照する既存のプラグインがあります。このコードを、フラグメントの一部であるクラスへの参照に置き換えました。

私は2つの問題に直面しています。フラグメントを jar ファイルとしてインポートすると、Eclipse アプリケーションとして実行されているプラ​​グインが ClassNotFoundException になるため、行った変更を確認できません。

これを克服するために、(フラグメントの) 追加ソースを既存のプラグイン プロジェクトにリンクします。ただし、リンクは絶対パスを使用しているため、展開には適していません。

コードを変更してプラグインをパッケージ化し、フラグメント コードに「依存」できるようにしたいと考えています。フラグメントを依存関係として追加する方法はありますか?

例えば:

Plugin Project I am changing : org.eclipse.*.editor
it depends on org.eclipse.*.edit

I have a fragment mydomain.*.edit which has org.eclipse.*.edit as host plugin

I want org.eclipse.*.editor to pick up mydomain.*.edit 
instead of org.eclipse.*.edit

ps: また、mydomain.*.edit の jar ファイルを plugins ディレクトリにパッケージ化して、そこから取得しようとしましたが、プラグインの依存関係タブで必要なプラグインを追加をクリックしてもリストに表示されません。 org.eclipse.*.editor の .xml ファイル

十分に明確でない場合はお知らせください。言い換えてみます。

前もって感謝します!

4

2 に答える 2

2

あなたが何をしたいのかを正しく理解していれば、それは不可能だと思います。他の方法を試す必要があります。

プラグインには、他のプラグインへの依存関係があります。フラグメントは個別のランタイム エンティティとして存在するのではなく、プラグインの拡張機能としてのみ存在します。したがって、プラグインは「editor」プラグインのみを参照できます。

フラグメントによって提供されるクラスには、直接アクセスすることはできません (また、アクセスするべきではありません)。プラグイン A によって提供される実行可能な拡張機能を実装している場合、元のプラグイン (A) によって返される可能性があります。

別のプラグイン (B) からフラグメントのコードを参照する場合、クラスはプラグイン B のクラスローダーによってロードされ、プラグイン A によってロードされるクラスとは異なります。

フラグメントの目的は何ですか? プラグイン A の内部コードにアクセスしますか? Eclipse エディターを拡張しますか?

元のプラグインが拡張可能として公開していない機能を拡張したい場合、唯一の方法は、プラグインを作成し、元のプラグインからエディター クラスを拡張し、元のプラグインと一緒に登録して代わりに使用することだと思います。

[編集] 多分このリンクはよりよく説明するでしょう: Eclipse FAQ

これが役に立てば幸いです、Vlad

于 2009-05-08T11:10:39.647 に答える
0

Vlad に感謝します。あなたの説明はとても役に立ちました。フラグメントを意図した拡張ベースのアーキテクチャとは異なり、拡張の一部として公開されていないエディターの特定のコンポーネントを変更する必要がありました。この変更は、フラグメントとして作成した外部プロジェクトを参照していましたが、エディターのクラスパスに配置できる jar ファイルをパッケージ化した通常の Java プロジェクトである可能性があります。

jar ファイルをクラス パスに配置することで依存関係の問題を解決できましたが、プラグインと関連するプラグインを jar ファイルとしてエクスポートしてドロップイン ディレクトリに配置すると、正しくインストールされません。(プラグインディレクトリにjarファイルを配置することもありません)

私が変更しようとしている Eclipse エディターは、EMF プロジェクトを使用しています。エディターの依存関係を解決するために、EMF プロジェクトをワークスペースに保持しました。しかし、Eclipse にバンドルされている EMF jar ファイルをワークスペース内のファイルに置き換えると、編集したいファイルが正しく認識されません。

これを行う別の方法はありますか?

于 2009-05-18T14:06:17.980 に答える