5

コンポーネントの 1 つをプラグ可能にする必要がある J2SE デスクトップ アプリケーションを作成しています。このプラグインの Java インターフェイスは既に定義済みです。ユーザーは、実行時に (GUI を介して) このインターフェースのどの実装を使用したいか (初期化ダイアログなどで) 選択できる必要があります。各プラグインは、実装クラスと必要なヘルパー クラスを含む JAR ファイルとしてパッケージ化されることを想定しています。

デスクトップJavaアプリでこの種のことを行うのに最適なテクノロジーは何ですか?

4

5 に答える 5

5

プラグインベースのJavaアーキテクチャ(まさにあなたが探しているように見えるもの)を何度も試した後、私はついにJSPFがJava5コードの最良のソリューションであることに気づきました。ソリューションのようなOSGIのような大きなニーズはありませんが、代わりにかなり使いやすいです。

于 2008-09-17T11:17:13.770 に答える
2

OSGI は確かに有効な方法です。ただし、プラグインをリロードするためにアンロードする必要がないと仮定すると、ハンマーを使用してナットを割っている可能性があります。

「java.util.jar」のクラスを使用してプラグイン フォルダ内の各 JAR ファイルをスキャンし、「java.net.URLClassLoader」を使用して正しいファイルをロードできます。

于 2008-09-17T09:49:22.593 に答える
1

プラグイン可能なコンポーネントが「1つだけ」必要な場合は、メタ情報に基づいてクラスをインスタンス化するだけで十分です。たとえば、クラスパスまたは特定のプラグインディレクトリにあるさまざまなjarからクラスローダー META-INF/ 情報を介して読み取ります.

一方、OSGi は、アプリケーション全体を構造化する手段を提供します。一部のプラグインが必要な大規模なデスクトップ アプリケーションが既にある場合、これは学習曲線が急勾配になります。デスクトップアプリとなるものから始めると、OSGi はアプリケーション全体をモジュール化する手段を提供します。「コンポーネントの分離」とモジュールの独立性についてです。

OSGi レーンに行きたい場合は、Apache Felix から始めるとよいでしょう。複雑で重く見えるかもしれませんが、それはモジュール間のそのレベルの分離に慣れていないためです。以前は、パブリック メソッドを呼び出すのはとても簡単でした...

于 2008-09-17T09:44:38.843 に答える
0

私が検討しているアプローチの 1 つは、アプリケーションで軽量の OSGi コンテナーを起動することです。これが正しく理解されていれば、指定されたフォルダーに存在するプラグイン JAR ファイルを検出でき、ユーザーが選択できるようにそれらを一覧表示できます。から。これは実現可能ですか?

Richard Deadman によるこの記事も見つけましたが、少し古い (2006 年?) ように見え、OSGi (少なくとも名前ではない) もjava.util.jarパッケージについても言及されていません。

于 2008-09-17T09:38:11.357 に答える
0

OSGi をプラグイン フレームワークとして使用することを考えましたか? OSGi を使用すると、モジュールをオンデマンドで更新/置換、ロードまたはアンロードできます。

于 2008-09-17T09:38:50.853 に答える