私は自分が書いているJavaコンソールアプリを持っています。そして、人々がそれのためのプラグインを書いて、それらのプラグインをjarとして配布できるようにしたいと思っています。ユーザーがプラグイン(jar)を「plugins」フォルダーにドロップし、アプリを再起動して、プラグインをロードして実行できるようにしたいと思います。プラグインなどで実行するクラス/メソッドをユーザーが指定する必要はありません。
ワイルドカードクラスパスを使用してjarを「plugins」ディレクトリにロードできますが、register()
各プラグインがどこかで定義する必要があるメソッドを実行することにより、これらのプラグインがアプリケーションに登録するための何らかの方法が必要です。プラグイン(jar)は、メソッドが定義されている場所(パッケージとクラス)をどのように指定しregister()
て、アプリがそれを呼び出すことができるようにすることができますか?
私はOSGiがこれを達成できることを理解していますが、これはかなり小さなアプリケーションであり、より単純なソリューションが存在する場合はOSGiを使用したくないと思います。
バックグラウンド:
これらのプラグインは、処理したいアプリからのイベントを登録します。ユーザーはプラグインごとに特定のイベントの処理を無効にできるため、これらのプラグインの構成はアプリのデータベースに保存されます。プラグインがそれ自体を登録すると、アプリはデータベースをチェックしてそのプラグインの構成が存在するかどうかを確認し、存在しない場合はデータベースに新しいデフォルト構成を作成します。