40

プラグインで拡張できる Java プログラムを作成したい。どうすればそれを行うことができ、どこを探すべきですか?

プラグインが実装する必要があるインターフェイスのセットがあり、それは jar にある必要があります。プログラムは、(プログラムに対して) 相対的なフォルダーで新しい jar を監視し、何らかの方法で登録する必要があります。


私は Eclipse RCP が好きですが、私の単純なニーズには多すぎると思います。

春もそうだけど、とりあえず見るからやってみようかな。

それでも、自分のプラグイン「フレームワーク」をできるだけ簡単に作成する方法を見つけたいと思っています。

4

6 に答える 6

48

過去に書いたソフトウェアでこれを行ったことがありますが、非常に便利です。最初に、すべての「プラグイン」クラスを実装する必要があるインターフェイスを作成しました。次に、Java ClassLoaderを使用してこれらのクラスをロードし、それらのインスタンスを作成しました。

あなたがそれについて行くことができる1つの方法はこれです:

File dir = new File("put path to classes you want to load here");
URL loadPath = dir.toURI().toURL();
URL[] classUrl = new URL[]{loadPath};

ClassLoader cl = new URLClassLoader(classUrl);

Class loadedClass = cl.loadClass("classname"); // must be in package.class name format

クラスがロードされたので、インターフェース名が MyModule であると仮定して、そのインスタンスを作成する必要があります。

MyModule modInstance = (MyModule)loadedClass.newInstance();
于 2008-08-25T00:21:40.637 に答える
18

OSGiを調べてください。

一方では、OSGi は、モジュラー ソフトウェア コンポーネントを使用して他の多くのことを管理、開始、実行するためのあらゆる種類のインフラストラクチャを提供します。一方、ニーズに対して重すぎる可能性があります。

ちなみに、Eclipse は OSGi を使用してプラグインを管理します。

于 2008-08-25T14:09:53.860 に答える
15

Java Service Provider (SPI) APIを詳しく調べることをお勧めします。これは、クラスパス上のすべての Jar で、特定のサービスを実装していると公開されているすべてのクラスを見つけるための単純なシステムを提供します。私は過去にプラグインシステムでそれを使用して大きな成功を収めました。

于 2008-08-25T03:05:00.260 に答える
6

基本的なプラグインのサポートが必要な場合 (ほとんどの場合)、受け入れられた解決策を支持しますが、Java Plugin Framework (JPF) もありますが、適切なドキュメントはありませんが、非常にきちんとしたプラグイン フレームワークです。実装。

これは簡単に展開でき、クラスローディングの特異性を乗り越えれば、非常に簡単に開発できます。上記のコメントとして、プラグイン ディレクトリの下のプラグイン ロードパスは、path という名前の通常のパッケージ パスにクラス ファイルをデプロイするだけでなく、完全なクラスパスに基づいて名前を付ける必要があることに注意してください。例えば

plugins
`-com.my.package.plugins
  `-com
    `-my
      `-package
        `-plugins
          |- Class1.class
          `- Class2.class
于 2008-12-20T21:47:15.160 に答える
4

自作のクラスローダのアプローチ: クラスローダについて学ぶには間違いなく良い方法ですが、「クラスローダ地獄」と呼ばれるものがあります。これは、より大きなプロジェクトでの使用に関して苦労した人々によって知られています。競合するクラスは、導入するのは簡単ですが、解決するのは困難です。

また、何年も前に Eclipse が OSGi に移行したのには十分な理由があります。したがって、それがペットプロジェクト以上のものである場合は、OSGi を真剣に検討してください。一見の価値があります。クラスローダと新しい技術標準について学びます。

于 2008-09-30T10:04:34.050 に答える
1

Eclipse のリッチ クライアント プラットフォームの上に構築し、Eclipse 拡張フレームワークを公開することを検討しましたか?

また、必要に応じて、Spring Framework がそれやその他のやりたいことを支援する場合があります: http://www.springframework.org/

于 2008-08-24T23:38:08.480 に答える