8

Java アプリで実行時にインターフェイスのすべての実装を検出し、ユーザーがフォルダーに追加できる JAR ファイルからこれらのクラスを動的にロードしたいと考えています。基本的にはプラグインシステムです。

これに対するいくつかの解決策を見つけました:

  • SPI を使用してください。これはあまり柔軟ではありません。外部テキスト ファイルを追加することなく、注釈で動作するか、拡張されたインターフェイスを探すだけのものが欲しいです。
  • Commons Discoveryを使用-- 最終リリースは 2005 年にさかのぼる 0.4 であるため、行き止まりのように見えます
  • Java Simple Plugin Frameworkを使用 します。5分で動作します。XML はありません。-- これは非常に未熟に見えます。

これに対して広く使用されている他のソリューションはありますか?

更新:コードを分離する必要はありません。OSGi は、現在の私の単純なニーズに対して複雑すぎるようです。また、意図を明確にするために、この質問のタイトルに「シンプル」を追加しました。

4

4 に答える 4

4

少し重い面がありますが、Apache FelixまたはEclipse Equinoxを検討する必要があります。どちらも OSGi の実装であり、非常に活発で効果的ですが、必要に応じて過剰になる可能性があります。ただし、これはまさに OSGi が解決するように設計されている問題の 1 つです。

于 2010-07-13T08:55:56.993 に答える
1

Apache River (以前の Jini) のサービス ディスカバリを試すことができます。

http://river.apache.org/

これは、リモート インターフェイスによってサービスを検出し、ローカルに RMI スタブであるプロキシをダウンロードします。

于 2012-04-05T14:09:11.597 に答える
0

@skaffman が言ったように、OSGi とそれに基づいて構築された最新の実装は完璧なソリューションのようです。流行に乗っている場合は、OSGi スタックにアノテーションを完全に組み込むiPOJOを検討してください (iPOJO はどの OSGi プラットフォームでも動作することに注意してください)。XML/Spring の流行に乗っている場合は、Blueprintの使用を検討してください。

最後に、JSPF について考えると、その未熟さについてあなたの意見を共有するつもりはありません。そのプロジェクトで少し協力したことで、OSGi が提供する手間やクラスパスの分離なしで、プラグインを簡単に使用できるため、この分野で非常に役立つことがわかりました。

于 2010-07-13T09:08:45.823 に答える
0

+1 SPI -- 軽量で、メンテナンスが少し必要 (services/* テキスト ファイル) ですが、Java のクラスローダーが「自動検出」を行う方法は 100% 信頼できるわけではありません。特定のプロジェクト/ディレクトリに対して、すべての実装が含まれていることを生成および/または(お勧めします)テストする単純なプログラムを使用して、テキスト ファイルの手間を軽減できます。

+2 OSGi -- ウェルター級に進んで、実装がより軽量で簡単になっていることに注意する場合 (少なくとも一部は!)

于 2011-11-02T11:23:01.167 に答える