web-dev-qa-db-ja.com

Javaプラグインフレームワークの選択

さまざまな種類の計算機を「プラグイン」できるようにする、実装しているサービスの単純なプラグインフレームワークを実装する方法を決定しようとしています。

Javaプラグインフレームワークについての number の投稿を読んだ後、最も一般的なオプションは次のようです:

OSGIは私たちが必要とする以上のもののようです。

「独自にローリング」することは問題ありませんが、一般的なライブラリを再利用するのは良いことです。

それでは、JPFとJSPFです。 JPFは活発に開発されていないようです。

JSPFは非常にシンプルで、本当に必要なものはすべて揃っています。しかし、私はそれについてあまり聞いていません。 StackOverflowで post を1つだけ見ました。他の誰かがJSPFの経験がありますか?または、このデザインの選択に関する他のコメントはありますか?


更新:これには必ずしも正しい答えがあるわけではありません。シンプルなソリューション。ニースガイドをEoHに感謝します。

59
Marcus Leon

明確に定義されたSPIおよび構成の一部で十分かもしれない)よりも1つだけ(または数個のみ)非常に複雑ではない「拡張ポイント」を計画している場合、使用する必要はありません。プラグインフレームワーク。

構成の一部とは、プラグインを見つけるための何らかのメカニズムを意味します。たとえば、META-INF/services/のようなもの、または単に構成ファイルにプラグインをリストします。

詳細(リクエストに応じて):

SPI = Service Provider Interface 、「APIの実装者側の同等物」。詳細については、APIとSPIの違いを検索してみてください。ただし、このコンテキストでは、プラグインによって実装されるインターフェースの空想的な用語にすぎません(つまり、プラグインの契約を定義します)。

Ethan Nicholasによる素敵な短い記事「 サービスプロバイダーインターフェイスの作成 」では、独自のSPIを作成する方法について説明しています。 Javaプラットフォーム自体。

META-INF/services/は、SPIを作成するためのより一般的なアプローチと見なすことができます。詳細については、 JARファイル仕様 の各セクションを参照してください。

29
Pavol Juhos

(免責事項:私はJSPFの作者です。ですから、私のコメントは一粒の塩と一緒に書いてください;-)

私がJSPFを使い始めた主な理由は、今と同じ問題があったからです。論文プロジェクト1)を拡張可能にし、2)ある程度明確なコード構造にするための簡単な解決策を探していました。

既存のフレームワークを使用することに決めなかった理由は、それらのほとんどが最初は非常に重いため、ドキュメントを読むのに迷ってしまい、元のタスクをほとんど忘れていたためです。だから、あなたの声明によると

さまざまな種類の計算機を「プラグイン」できるようにする、実装しているサービスの単純なプラグインフレームワークを実装する方法を決定しようとしています。

JSPFを試してみて、1〜2時間でどのくらい遠くまで行くことができると思います。

ただし、最終的な決定は、正確に何を達成したいか、および特定の状況にも少し依存します。

プロジェクトを構築したり、プロジェクトにプラグインをロードしたりするためにそれを使用している多くの個人から肯定的な結果を聞いています。一方、自分のプログラミングスタイルとうまく調和していないと感じたために、この部門で再び破棄した人もいます。

だから、あなたの質問に簡単に(そして確かに偏った方法で)答えるには、私は

OSGiプロジェクトおよびチーム用

  • 大きく、多くの人がそれに取り組んでいます
  • インフラストラクチャのセットアップのオーバーヘッドを正当化する
  • 提供される特定のサービスを必要とする

[〜#〜] jpf [〜#〜]プロジェクトおよびチーム用

  • 中規模の(?、正直に言って、彼らがターゲットにしているプロジェクト/チームの規模についてはわかりません)
  • xML構成、詳細なプラグインライフサイクル管理、拡張可能なプラグインなど、コードを整理するためのより構造化された機能が必要です...

[〜#〜] jspf [〜#〜]プロジェクトおよびチーム用

  • アジャイルパラダイムに従った小さなサイズ
  • 設定やセットアップを必要とせず、すぐに機能するものが必要です
  • 単純化のためにいくつかの機能を犠牲にしても構わない

あなたのシナリオに最も適したプラグインフレームワークを見つけていただければ幸いです。そして、あなたが何を試みても、私はあなたの結果について聞いて幸せです。

43
EoH

本当に簡単な解決策が必要な場合は、 jin-plugin を試してください。これは、JavaおよびPHP用の最小限のプラグインフレームワークです。

2
Faz