2011-07-15 20 views
0

私は自分のプラグインシステムを作ろうとしてきました。私は2つの別々のプロジェクトがあります。 1つは読み込みを行うメイン 'プログラム'用で、もう1つは最初のプラグイン用のプロジェクトです。プラグインはIPluginを実装しています。私はロードメソッドのメインプロジェクトでもそれを使用して、クラスプラグイン用に実装することができます。Java - 私自身のプラグインシステム

次に、プラグインプロジェクトをjarファイルに変換し、実行時にメインプロジェクトにロードしようとします。問題はこれです:メインプロジェクトでは正常にロードされますが、インスタンスを作成してIPluginとしてキャストしようとすると(現在ロードされているすべてのプラグインのリストを取得できます)、 IPlugin。私が考えることができる唯一の理由は、私が使用している2つのIPluginインターフェース(各プロジェクトで1つ)が同じインターフェースであることを認識していないことです。どのようにしてIPluginをそれらの間に「リンクする」のですか?私はそれを独自のjarファイルに入れて、それを各プロジェクトに含めるべきですか?

私は開発のためにBlueJを使用しています。

申し訳ありませんが、私は意味がありません...私は可能な限り状況を説明しようとしています。明確にする必要がある場合はお知らせください。ありがとう!

更新:

私は両方のプロジェクトでそのJARを使用し、その後、ちょうどIPluginのためのjarファイルを試してみました。今すぐ「java.lang.noClassDefFoundError:IPlugin(java.lang.ClassLoader内)」をコンパイルします。IPluginなどを認識してコンパイルしますが、実行時には何がわからないようです...

URLClassLoader.loadClass()メソッドを呼び出しているときに発生します。

答えて

3

プラグインプロジェクト(およびjarファイル)には、IPluginインターフェイス(またはその両方で必要な他のクラス)を含めることはできません。代わりに、プラグインをコンパイルするときにメインプロジェクト用にすでにコンパイルされたものをコンパイラクラスパスに置き、プラグインクラスローダに親クラスローダとしてメインクラスローダを持たせます。

1

IPluginインターフェイスは1つだけ必要です。どのようにパッケージ化するかはあなた次第です。別の瓶に入れても問題ありません。

+0

私はIPlugin用のjarファイルを試してみましたが、両方のファイルでそのJARを使用しました。今すぐ「java.lang.noClassDefFoundError:IPlugin(java.lang.ClassLoaderの中にあります。IPluginなどを認識してコンパイルしますが、実行時にはそれが何であるかわからないようです...」 – will

+0

私がURLClassLoader.loadClass()メソッドを呼び出しています – will

+0

どのようにサーバーを実行しますか(コマンドラインとは何ですか) – MeBigFatGuy