153

Javaアプリケーション用のプラグインシステムをどのように実装しますか?

次のことを実現する(開発者にとって)使いやすいシステムを持つことは可能ですか?

  • ユーザーはプラグインをアプリのサブディレクトリに配置します
  • プラグインは設定画面を提供できます
  • フレームワークを使用する場合、ライセンスは商用開発と互換性がありますか?
4

8 に答える 8

111

まず、すべてのプラグインが実装する必要があるインターフェースが必要です。

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

プラグインの作成者は、プラグインを JAR ファイルにバンドルする必要があります。アプリケーションは JAR ファイルを開き、JAR マニフェストの属性または JAR ファイル内のすべてのファイルのリストを使用して、プラグイン インターフェイスを実装するクラスを見つけることができます。そのクラスをインスタンス化すると、プラグインの準備が整います。

もちろん、何らかのサンドボックスを実装して、プラグインができることとできないことを制限することもできます。私は、2 つのプラグインで構成される小さなテスト アプリケーションを作成しました(そしてそれについてブログを書きました)。そのうちの 1 つはローカル リソースへのアクセスが拒否されています。

于 2009-01-21T12:45:48.980 に答える
43

OSGiを使用します。

これは、Eclipse プラグイン システムの基盤です。Equinoxは Eclipse の実装 (ライセンスされた EPL) であり、Felixは Apache Project の実装 (ライセンスされた Apache Public License) です。

Eclipse は、OSGi があなたが言及した点をカバーできる具体的な例を提供します (または、完全な Eclipse/SWT/JFace スタックが必要な場合は、 Eclipse RCPの上にアプリケーションを構築することもできます)。

于 2009-01-21T12:44:35.673 に答える
30

1.6 以降、独自の単純なシステムをコーディングする場合に使用できるjava.util.ServiceLoaderがあります。

ただし、基本的な機能以上の機能が必要な場合は、既存のフレームワークのいずれかを使用してください。

于 2009-01-21T14:34:20.070 に答える
16

JPF(Javaプラグインフレームワーク)もあります。

于 2009-01-21T14:26:01.977 に答える
15

私は OSGi に 1 週​​間取り組みました。最後は悪い夢のようでしたが、多くのことを学びました。

私は OSGi を動作させることができました (簡単ではありません。すべての例が古くなっています。ネット上のすべての情報は 5 年でなくても少なくとも 3 年以上前のものです)。瓶が現れます。

要するに、マニフェストの作成に使用される不明瞭なツールはわずかしかなく、十分に文書化されていません (BND Tools はほとんど不明瞭ではありませんが、Eclipse の特定のプロセス用に設計されています)。また、利用可能な OSGi 情報のほとんどは、既存のデスクトップ アプリケーションを持つアプリケーション開発者を対象としていません。

これにより、情報の多くのコンテキストが曖昧または不適切になります。Neil Bartlett のブログ記事は最大の助けになりましたが、それらの記事でさえシステムを動作させることができませんでした (私は Felix チュートリアルからいくつかのコードを取得し、それをつなぎ合わせて組み込みフレームワークを動かしました)。彼が何年も前に無料で投稿した彼の本のドラフトを見つけましたが、これは素晴らしいものですが、Eclipse OSGi サポートの変更により、Eclipse の例は機能しません。

于 2012-12-10T19:34:44.770 に答える
10

上記の問題を解決するためにOSGiを推奨することは、非常に貧弱なアドバイスだと思います。OSGiは「正しい選択」ですが、上記のようなシナリオでは、JPFまたは自家製のミニマルなフレームワークのいずれかで十分だと思います。

于 2009-01-29T18:24:59.867 に答える
3

何年も前に、私はそのようなプロジェクトを開始しました。すぐに準備が整うことを願っています.NetBeans や Eclipse などのプロジェクトに触発されましたが、その間に少し違うものに変わりました. OSGi は今では良い選択のように見えますが、自分のプロジェクトと比較する機会がありませんでした。上記の JPF と似ていますが、同時に多くの点で異なります。

私を動機づけた基本的な考え方は、Web アプリケーション、デスクトップ アプリケーション、またはアプレット/JWS アプリケーション (もちろん、これは UI をカバーしていませんが、まだ) をコア機能として分離せずに、Java アプリケーションをできるだけ簡単に構築することです。

私はいくつかの目標を念頭に置いてプロジェクトを構築しました。

  • Web アプリケーションを作成するかデスクトップ アプリケーションを作成するかは関係ありません。同じ方法でアプリケーションを起動する必要があります。単純な main メソッドです。空想的な web.xml 宣言はありません (標準の Web 記述子を持つことに反対しているわけではありませんが、 「サーブレット」を追加するプラグインシステムとはうまくいきません-私はそれらをRequestHandler(s)と呼びます-あなたの意志で動的です)。
  • 「拡張ポイント」の周りに「拡張機能」を簡単にプラグインできます-Eclipseからのものですが、異なるアプローチです。
  • すべてのプラグインが登録されているため (XML ファイル)、アプリケーションはビルド システムとは無関係に自己展開可能である必要があります。最後に、アプリケーションを呼び出し、特定の場所に自己展開するように指示します。
  • Maven から借用したもので、リポジトリ (Maven 1 および 2 リポジトリを含む) からコードをダウンロードできるため、リポジトリにアクセスできる限り、アプリケーションを単一の小さな jar としてデプロイできます (便利な場合があり、基本的にこれは auto-更新 - 新しいバージョンがダウンロードされ、それをインストールするにはあなたの許可が必要であるという Web アプリケーションからの通知が好きではないですか? 私はそれが好きだと知っています)。
  • システムの状態に関する基本的なアプリケーションの監視、障害発生時の電子メール通知
于 2009-10-23T14:03:41.743 に答える